предисловие
В общем, когда мы пишем проекты React, для разработки удобнее использовать скаффолдинг create-react-app, но если мы хотим написать плагин, то использовать 3-сторонний скаффолдинг немного раздуто. простой инструмент, который подходит для нашей разработки.Этот Wen учит вас, как разработать шаг за шагом Плагин React, приступим 😊
Готов к работе
Если рабочий хочет сделать работу хорошо, он должен сначала наточить свой инструмент, давайте выберем тип
- Typescript
В целях облегчения разработки мы выбираем в качестве языка разработки Typescript, который может проверять тип в реальном времени, и, кстати, мы также можем притворяться принудительными.
Примечание: Typescript необязателен, можно и js выбрать для slash and burn, но лучше писать на Typescript, все-таки 9102, год Сао 😄
- webpack + babel
Здесь мы сначала используем знакомый веб-пакет в качестве инструмента для упаковки (позже мы попытаемся перейти на накопительный пакет в качестве инструмента для упаковки).
- jest + travis + coveralls
jest В качестве нашего инструмента для тестирования кода здесь мы выбираем travis, онлайн-инструмент непрерывной интеграции (помогающий вам упаковывать, создавать, запускать команды скриптов, тестировать код и т. д.) Используйте комбинезоны для создания значков на основе покрытия кода, полученного после тестирования кода travis (они есть во многих проектах Github).
Структура каталогов
Теперь давайте примерно организуем структуру каталогов
react-yan-progress
├── build // 打包目录
│ └── YanProgress.min.js
├── src // 源码
│ ├── index.css
│ └── index.tsx
├── test // 测试文件
│ └── YanProgress.test.js
├── index.d.ts // 声明文件(ts)
├── jest.config.js // jest 测试配置文件
├── webpack.config.js // webpack 配置文件
├── tsconfig.json // ts 配置文件
├── package.json
├── .travis.yml // travis 配置文件
├── LICENSE
└── README.md
вариант разработчика
Все зависимые пакеты следующие
{
"devDependencies": {
"@babel/core": "^7.1.6",
"@babel/preset-env": "^7.1.6",
"@babel/preset-react": "^7.0.0", // for react
"@types/react": "^16.7.18", // 声明文件
"@types/react-dom": "^16.0.11", // 声明文件
"babel-loader": "^8.0.4",
"chai": "^4.2.0", // 测试断言库
"coveralls": "^3.0.2", // 代码覆盖率
"css-loader": "^1.0.1",
"jest": "^23.6.0", // 测试工具
"react": "^16.7.0",
"react-dom": "^16.7.0",
"style-loader": "^0.23.1",
"ts-loader": "^5.3.2", // 解析 ts
"typescript": "^3.2.2", // 解析 ts
"webpack": "^4.25.1",
"webpack-cli": "^3.1.2"
}
}
Конфигурация команды выглядит следующим образом, деталиpackage.json
{
"scripts": {
"build": "webpack --config webpack.config.js --progress --colors",
"test": "jest ./test/YanProgress.test.js",
"coveralls": "cat ./coverage/lcov.info | coveralls"
},
}
конфигурация веб-пакета
Мы используем webpack4, пожалуйста, обратитесь к официальному сайту для конкретной конфигурации,портал
const path = require('path');
module.exports = {
mode: "production", // 生产模式
entry: { // 入口
"YanProgress": path.resolve(__dirname, './src/index.tsx')
},
output: { // 出口
path: path.resolve(__dirname, './build'),
filename: '[name].min.js',
publicPath: "./build/",
libraryTarget: 'umd', // 打包方式
library: 'YanProgress', // 导出变量
libraryExport: 'default', // 默认导出
},
module: {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', "@babel/preset-react"]
}
},
{
loader: 'ts-loader', // 解析 ts
}
],
include: path.resolve(__dirname, "./src/"), // 只解析 src 目录下的文件
},
{
test: /\.css$/,
loader: "style-loader!css-loader?modules&localIdentName=[hash:8]", // css_modules 配置详情 http://www.ruanyifeng.com/blog/2016/06/css_modules.html
include: path.resolve(__dirname, "./src/"),
}
]
},
resolve: { // 省略文件后缀时,默认按下面的配置取
extensions: ['.ts', '.tsx', '.js'],
},
externals: { // 不把 react 打包进去
react: 'react'
}
};
[Необязательно] Конфигурация машинописного текста
Так как мы хотим внедрить модуль css в ts файл, но ts его не знает, нам нужно настроить следующее
Создайте новый в корневом каталоге проектаindex.d.ts
файл декларации ts
declare module '*.css';
Начать писать плагины
Здесь то же самое, что и обычные компоненты разработки, например
// jsx
import React from 'react';
class YanProgress extends React.Component{
render() {
return (
<div>
骚年,写代码快乐吗,看我干嘛 😄,赶快滚去写代码啊,别忘了点个 star 😂
</div>
);
}
}
export default YanProgress; // 记得导出啊,骚年
Вы можете непосредственно посмотреть код, который я написал (затем ctrl+c, ctrl+v), исходный код здесь,нажми на меня
Зависимости установки, сжатие и упаковка кода
webpack4 будет сжимать код по умолчанию, поэтому мы прямо сейчас выполняем команду скрипта, настроенную в package.json.
$ yarn
$ yarn run build
проверка кода
-
модульный тест
допустимыйtest
Создайте новый в каталогеxxx.test.js
тестовый файл, напишите тестовые примеры (здесь используется ожидаемый стиль библиотеки утверждений chai) и выполните следующие команды.$ yarn run test
-
пакетный тест
Если вы также хотите импортировать как пакет npm (import YanProgress from 'react-yan-progress'
), чтобы проверить, вы можете выполнить следующую командуВ корневом каталоге вашего проекта откройте терминал и выполните следующую команду, чтобы установить ссылку
$ yarn link
В корневом каталоге демонстрационного проекта, который вы хотите протестировать, выполните следующее, а затем вы можете использовать его следующим образом.
import YanProgress from 'react-yan-progress'
$ yarn link react-yan-progress
Непрерывная интеграция
Здесь используется более удобный и простой инструмент онлайн-тестирования travis и комбинезоны инструмента покрытия кода тестами, URL-адрес выглядит следующим образом:
Непрерывная интеграцияtravis-ci.org
покрытие кодаcoveralls.io
Процесс регистрации пропускается, ведь тут уже много туториалов (для гугл программирования 😂)
Создайте новый в корневом каталоге проекта.travis.yml
файл, конфигурация следующая
language: node_js # 运行环境
node_js:
- "10.6.0" # 版本
branches:
only:
- master # 只有主支可以
before_install:
- export TZ='Asia/Shanghai' # 如果你的项目里涉及到时间处理,这里需要设置时区
install: yarn install # 安装 npm 包
script: # 执行命令
- yarn run build # 打包
- yarn run test # 测试
after_success: # 成功之后执行如下命令
- yarn run coveralls # 测试代码覆盖率
Опубликовать пакет npm
Зарегистрируйте учетную запись npm, процесс регистрации опущен
Прежде чем обращать внимание, зайдите на официальный сайт npm, чтобы узнать, не было ли упреждающе занято имя вашего пакета.
Выполните следующую команду для публикации
$ npm publish
пакет обновлений
Выполните следующую команду (x.x.x -> major.minor.patch)
$ npm version patch
взносы с открытым исходным кодом
Примите открытый исходный код, чтобы развитие сообщества и даже отрасли могло быть более мотивированным.
Примечание. Например, ваша звезда — это самое большое поощрение для меня и мотивация поддержать меня в продолжении работы с открытым исходным кодом.
- Сообщество React-компонентовawesome-react-components
- другие сообщества, вы можете перейти в
Github
проводить исследования
Закончи цветок 🎉
👏 Приглашаю всех заниматься дзи со мной (Github) 😊
- адрес проектаGitHub.com/yangfan2016…
- Оригинальный пост в блогеyangfan2016.github.io