предисловие
На момент написания этой статьи версия React уже17.x
, машинопись тоже уже есть4.x
, вебпак тоже пришел5.x
. И бизнес нашей группы был очень загружен, поэтому наш шаблон проекта по-прежнему React16.x
(функция хука не поддерживается), также没有支持TS
,а такжеwebpack
Е Цай3.x
, Это была конфигурация несколько лет назад. Конфигурация этого проекта подобна разбитому кораблю в море. Если вы не будете осторожны, он будет разбит волной. Конечно же, чем больше вы об этом беспокоитесь, что будет.Вдруг, когда мы пакуемся, Удивительно обнаружил, что запакованный плагин вышел из строя, из-за чего наша упаковка 📦 постоянно глючила. Наконец, для решения проблемы был заменен плагин, но это как сломанный корабль, и я не знаю, где будут проблемы.
Да, после стольких слов, я рыбак, который хочет сменить лодку🚢. Кто не хочет быть онлайн без проблем.
Создайте среду разработки TS+React
planA
: Самый быстрый способ - использовать его напрямуюcreate-react-app
:
npx create-react-app my-app --template typescript
Но кажется, что это немного скучно, тогда мы используемplanB
, создайте этот проект вручную:
Установите React и TS
1. Установите соответствующую библиотеку
npm i react react-dom react-redux typescript --save
2. Установите библиотеку объявлений @types
npm i @types/react @types/react-dom @types/react-redux --save-dev
После установки версия пакета на моей стороне следующая:
-
react
17.0.1 -
react-dom
17.0.1 -
react-redux
7.2.3 -
typescript
4.1.3
Создайте tsconfig.json
tsconfig.json
Файл можно понимать как хранящий компиляциюTS
Файл конфигурации, здесь я вставляю свою собственную конфигурацию:
{
"compilerOptions": {
"target": "es5", // 编译的目标
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": false,
"jsx": "preserve",
"baseUrl": "./",
"paths": {
"@": ["src/"]
}
},
"include": ["./src/**/*"]
}
Частичный анализ конфигурации tsconfig
baseUrl
:TS编译器
Адрес модуля, который необходимо скомпилироватьpaths
: на основеbaseUrl
Путь указанного модуля и отношение сопоставления пути
import a from '../../src/a.ts';
等价于
import a from '@/a.ts';
include
: целевая папка для компиляцииjsx
: Эта конфигурация находится вtsx
средняя поддержкаjsx
, необязательный параметрpreserve
,react
а такжеreact-native
. Эти режимы работают только на этапе генерации кода — проверка типов не затрагивается. существуетpreserve
сохранится в сгенерированном коде в режимеJSX
для последующих операций преобразования (например:Babel
). Кроме того, выходной файл будет иметь.jsx
имя расширения. react
Режим генерируетReact.createElement
, нет необходимости выполнять операцию преобразования перед использованием, а расширение выходного файла.js
.react-native
эквивалентноpreserve
, что также сохраняет всеJSX
, но расширение выходного файла.js
.
1. Для конкретного использования см. TS оИспользование baseUrl и путей2. tsconfig.jsonбольше конфигурации.
Как мы можем запустить наш проект?.tsx
А файлы? Как я мог забытьwebpack
Затем следующий шаг должен установить и настроитьwebpack
.
Установить веб-пакет
npm i webpack webpack-cli --save-dev
-
webpack
4.41.2 -
webpack-cli
3.3.10
настроить веб-пакет
После установки пакета долгое время кажется, что мы не начали писать никакого кода, тогда мы напишем код и настроим наш вебпак.
Структура каталогов веб-пакета:Да, вы правильно догадались, я все-таки написал этот конфигурационный файл вебпака, придерживаясь принципа разделения властей.webpack.common.js
: сохранить общедоступную конфигурациюwebpack.dev.js
: Конфигурация среды разработки хранилищаwebpack.prod.js
Храните конфигурацию производственной среды
Конкретная конфигурация может перейти кофициальный сайт вебпакаСсылаться на. Здесь мы говорим о том, что необходимо для настройки ts.loader
настроить
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: ['babel-loader', 'ts-loader']
}
plugins
настроить
const aliasPath = require('../tsconfig.json').compilerOptions.paths;
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx'],
alias: Object.keys(aliasPath).reduce((alias, key) => {
alias[key] = path.resolve(aliasPath[key][0]) + '';
return alias;
}, {})
}
alias
Читать здесьtsconfig.json
Сопоставление отношения пути в.
Далее нам нужно запустить проект, позвольте мне датьpackage.json
Добавьте несколько команд:
"scripts": {
// 开发环境
"dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.dev.js",
// 生产环境打包
"build": "cross-env NODE_ENV=production webpack --config ./build/webpack.prod.js",
// 打包大小分析
"analyzer": "cross-env Analyzer=on npm run build && webpack-bundle-analyzer --port 8888 ./dist/analyzer.json"
},
Пока что простойTS+React
Окружение построено, и проект готов к запуску🎉. Но перед тем, как использовать его в команде, нам также нужно ограничить стиль кода каждого, иначе отступ одного файла равен 4, а отступ другого файла - 2. Это действительно неудобно. 😭 Кроме того, вам нужно использоватьESlint
Выполните необходимые проверки кода.
Унифицированные инструменты стиля кода — красивее
Первым шагом является установкаprettier
:
npm install prettier -D
После установки мы можем объявить два файла,.prettierignore
выражатьprettier
Игнорировать каталоги, которые не нужно проверять (можно понять, что это мое дело, мне не нужно, чтобы вы заботились), и.prettierrc.js
нашprettier
Правилами определено место.
.prettierignore
Конфигурация выглядит следующим образом:
# Ignore artifacts:
node_modules
dist
.vscode
.prettierignore
.prettierrc.js
Конфигурация выглядит следующим образом:
module.exports = {
printWidth: 140,
tabWidth: 2,
semi: true,
singleQuote: true,
trailingComma: 'none',
bracketSpacing: true,
jsxBracketSameLine: true,
arrowParens: 'always',
insertPragma: false,
requirePragma: false,
useTabs: false
};
Конфигурация у всех разная, поэтому пишите ее в соответствии со спецификациями вашей команды.
Если все используютvscode
, однозначно рекомендую всем скачатьprettier
плагин.Разумеется, после скачивания необходимо всем напомнить, что конфигурация этого плагина глобальная, если вы хотите использовать текущий проектprettier
Если вы настроили, рекомендуется создать каталог..vscode
папку, объявитьsettings.json
,существуетsettings.json
Конфигурация в редакторе имеет приоритет над глобальной конфигурацией редактора.
settings.json
Конфигурация выглядит следующим образом:
{
// prettier规则使用当前目录的.prettierrc.js
"prettier.configPath": ".prettierrc.js",
// 保存的时候自动格式化
"editor.formatOnSave": true,
}
Инструмент для решения проблемы качества кода — eslint
Конечно, следующим шагом в унификации стиля кода является решение проблемы качества кода, это все еще старый шаг, давайте сначала установим его:
npm i eslint -D
На этом этапе нам нужно объявитьeslintrc.js
документ:
module.exports = {
parser: '@typescript-eslint/parser', // 定义ESLint的解析器
extends: ['plugin:prettier/recommended'], //定义文件继承的子规范
plugins: ['@typescript-eslint', 'react-hooks', 'eslint-plugin-react'], //定义了该eslint文件所依赖的插件
env: {
//指定代码的运行环境
browser: true,
node: true
},
settings: {
//自动发现React的版本,从而进行规范react代码
react: {
pragma: 'React',
version: 'detect'
}
},
parserOptions: {
//指定ESLint可以解析JSX语法
ecmaVersion: 2019,
sourceType: 'module',
ecmaFeatures: {
jsx: true
}
},
rules: {
// 自定义的一些规则
'prettier/prettier': 'error',
'linebreak-style': ['error', 'unix'],
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn',
'react/jsx-uses-react': 'error',
'react/jsx-uses-vars': 'error',
'react/react-in-jsx-scope': 'error',
'valid-typeof': [
'warn',
{
requireStringLiterals: false
}
]
}
};
parser
конфигурация: плагин@typescript-eslint/parser
Пусть ESLint анализирует TypeScript.
npm i @typescript-eslint/parser -D
extends
Конфигурация: чтобы предотвратить конфликты между правилами eslint и prettier, нам нужно интегрировать их и установить['plugin:prettier/recommended']
.
npm i eslint-config-prettier eslint-plugin-prettier -D
plugins
Конфигурация:
@typescript-eslint
: содержит различные определенные спецификации для обнаружения кода машинописного текста.react-hooks
: Для обнаружения и регулирования спецификации кода виджета проверки хуков React.eslint-plugin-react
: Реагируйте код, чтобы обнаружить и регулировать запись вставки.
npm i eslint-plugin-react eslint-plugin-react-hooks @typescript-eslint/eslint-plugin -D
Наконец, нам нужно изменитьsettings.json
{
"prettier.configPath": ".prettierrc.js",
"eslint.options": {
"extensions": [".js", ".ts", ".tsx", "jsx", "html"]
},
"editor.codeActionsOnSave": {
// 保存时使用eslint进行格式化
"source.fixAll.eslint": true
}
}
слишком далекоESlint+Prettier
Настройка завершена, теперь нам нужно отправить наш код.
Канонический Git фиксирует
Мы хотим, чтобы наш код был полностью выполнен перед его фиксацией в репозиторий.代码格式化和代码质量检查
Для этого нам нужно использовать инструмент нам.git缓存区
Сделаны последние измененные файлы格式化
а также lint 规则校验
.
npm install husky lint-staged -D
Затем нам нужно изменитьpackage.json
документ:
"husky": {
"hooks": {
"pre-commit": "lint-staged",
}
},
"lint-staged": {
"*.{ts,tsx,js,jsx}": [
"eslint --config .eslintrc.js"
],
"**/*": "prettier --write ."
}
поэтому мы используемESlint
противts,tsx,js,jsx
Файлы в конце кода проверяются на качество кода и используютсяprettier
Форматирование кода для всех файлов. Далее мы должны написать для этого коммитаcommit
.
Если вы найдете в Интернетеbug
Когда требуется откат, результатcommit
записи всеfix
или修改代码
Подсчитано, что менталитет взрывается при подаче записей.В настоящее время нам нужно стандартизировать нашиGit commit
Информация.
Сначала устанавливаем необходимые библиотеки:
npm i @commitlint/cli @commitlint/config-angular -D
После этого мы создаемcommitlint.config.js
документ:
module.exports = { extends: ['@commitlint/config-angular'] };
мы используем напрямуюangular
изcommit
спецификации, поэтому больше не нужно записывать информацию о конфигурации. Дополнительные сведения о конфигурации см.эта статья.
Наконец, мы только что настроилиpre-commit
После этого добавьте следующую информацию:
"husky": {
"hooks": {
"pre-commit": "lint-staged",
// commit信息
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
HUSKY_GIT_PARAMS
для насcommit
информация, затемcommitlint
обработать эту информациюlint
чек об оплате.
Суммировать
Наконец, мы завершили отправку кода, и на данный момент мы завершилиTS + React
Конфигурация всего проекта работает. Мы завершили нашу идею по смене лодок🚢, нам стоит научиться потом открывать новую лодку, то есть как использовать ее в нашем проектеTS + React Hook
.