咱们应用热门构建工具vite创立我的项目,并抉择react + ts模板。对于Eslint + Prettier + husky + lint-staged配置同样实用于webpack、Vue创立的我的项目,稍有不同的中央下文会提到,请释怀食用。
1、应用vite创立我的项目
yarn create vite
输出我的项目名并抉择 react + ts
success Installed "create-vite@3.0.0" with binaries: - create-vite - cva✔ Project name: … my-app✔ Select a framework: › react✔ Select a variant: › react-tsDone. Now run: cd my-app yarn yarn dev
2、装置Eslint
yarn add -D eslint
3、初始化配置Eslint
npm init @eslint/config
或者
npx exlint --init
3.1、抉择模式:
选查看语法并发现问题
? How would you like to use ESLint? … To check syntax only❯ To check syntax and find problems To check syntax, find problems, and enforce code style
3.2、抉择模块化语法:
选JavaScript modules
✔ How would you like to use ESLint? · problems? What type of modules does your project use? …❯ JavaScript modules (import/export) CommonJS (require/exports) None of these
3.3、抉择js框架:
选React
? Which framework does your project use? …❯ React Vue.js None of these
3.4、是否应用ts
我抉择是
? Does your project use TypeScript? › No / Yes
3.5、抉择代码运行环境
用空格选中browser + node
? Where does your code run? … (Press <space> to select, <a> to toggle all, <i> to invert selection)✔ Browser✔ Node
3.6、 抉择配置文件格式
选JavaScript
? What format do you want your config file to be in? …❯ JavaScript YAML JSON
3.7、装置三个依赖
抉择是 (eslint解析react和ts的依赖)
The config that you've selected requires the following dependencies:eslint-plugin-react@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest? Would you like to install them now? › No / Yes
3.8、抉择包管理器
抉择yarn
? Which package manager do you want to use? … npm❯ yarn pnpm
4、装置实现
在我的项目根目录生成.eslintrc.cjs文件
这里就是下面3步骤初始化的文件,前面的配置都写这里
// .eslintrc.cjsmodule.exports = { env: { browser: true, es2021: true, node: true }, extends: "eslint:recommended", //eslint举荐的规定(过于严格) parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, rules: { }}
5、持续装置依赖
应用vite的同学装置 vite-plugin-eslint
yarn add -D vite-plugin-eslint
应用webpack的同学装置 eslint-webpack-plugin
yarn add -D eslint-webpack-plugin
以上两个依赖的作用都是在yarn dev时主动查看eslint标准
装置eslint解析器 @babel/core @babel/eslint-parser
yarn add -D @babel/core yarn add -D @babel/eslint-parser
6、配置vite.config.js 或 webpack.config.js
// vite.config.jsimport react from '@vitejs/plugin-react';import { defineConfig } from 'vite';import eslintPlugin from 'vite-plugin-eslint';export default defineConfig({ plugins: [ react(), eslintPlugin({ include: ['src/**/*.tsx', 'src/**/*.ts', 'src/*.ts', 'src/*.tsx'], // eslint校验的文件类型 }), ],});
// webpack.config.jsconst ESLintPlugin = require('eslint-webpack-plugin');module.exports = { // ... plugins: [new ESLintPlugin(options)], // ...};
7、配置eslintrc.cjs
此处咱们应用腾讯的 AlloyTeam Eslint
它会笼罩eslint举荐的规定,并且兼容prettier
yarn add -D eslint-config-alloy
// eslintrc.cjsmodule.exports = { extends: [ 'alloy', 'alloy/react', 'alloy/typescript', ], env: { // 你的环境变量(蕴含多个预约义的全局变量) // // browser: true, // node: true, // mocha: true, // jest: true, // jquery: true }, globals: { // 你的全局变量(设置为 false 示意它不容许被从新赋值) // // myGlobal: false }, rules: { // 自定义你的规定 },};
8、装置prettier标准代码格局
yarn add -D prettier
装置后在我的项目根目录创立.prettierrc.cjs文件
AlloyTeam 提供了一套 Prettier 配置,此配置间接继承。
// .prettierrc.cjsmodule.exports = { // 一行最多 120 字符 printWidth: 120, // 应用 2 个空格缩进 tabWidth: 2, // 不应用缩进符,而应用空格 useTabs: false, // 行尾须要有分号 semi: true, // 应用单引号 singleQuote: true, // 对象的 key 仅在必要时用引号 quoteProps: 'as-needed', // jsx 不应用单引号,而应用双引号 jsxSingleQuote: false, // 开端须要有逗号 trailingComma: 'all', // 大括号内的首尾须要空格 bracketSpacing: true, // jsx 标签的反尖括号须要换行 bracketSameLine: false, // 箭头函数,只有一个参数的时候,也须要括号 arrowParens: 'always', // 每个文件格式化的范畴是文件的全部内容 rangeStart: 0, rangeEnd: Infinity, // 不须要写文件结尾的 @prettier requirePragma: false, // 不须要主动在文件结尾插入 @prettier insertPragma: false, // 应用默认的折行规范 proseWrap: 'preserve', // 依据显示款式决定 html 要不要折行 htmlWhitespaceSensitivity: 'css', // vue 文件中的 script 和 style 内不必缩进 vueIndentScriptAndStyle: false, // 换行符应用 lf endOfLine: 'lf', // 格式化嵌入的内容 embeddedLanguageFormatting: 'auto',};
9、配置VScode
装置Eslint插件、Prettier插件
// 配置vscode// 关上:设置 -> 文本编辑器 -> 字体 -> 在 settings.json 中编辑// settings.json文件{ "files.eol": "\n", "editor.tabSize": 2, // 保留时将代码依照eslint规定修复 "editor.codeActionsOnSave": { "source.fixAll.eslint": true, }, // 默认格式化插件 "editor.defaultFormatter": "esbenp.prettier-vscode", // 增加eslint反对 "eslint.validate": [ "javascript", "javascriptreact", "typescript", "typescriptreact" ] }
10、装置并配置husky + lint-staged
装置依赖
yarn add -D huskyyarn add -D lint-staged
husky
一个为 git 客户端减少 hook 的工具。装置后,它会主动在仓库中的 .husky/ 目录下减少相应的钩子;比方 pre-commit 钩子就会在你执行 git commit 的触发。咱们能够在 pre-commit 中实现一些比方 lint 查看、单元测试、代码丑化等操作。
package.json 须要增加 prepare 脚本
{ "scripts": { "prepare": "husky install" }}
做完以上工作,就能够应用 husky 创立一个 hook 了
npx husky add .husky/pre-commit "npx lint-staged"
lint-staged
一个仅仅过滤出 Git 代码暂存区文件(被 git add 的文件)的工具;这个很实用,因为咱们如果对整个我的项目的代码做一个查看,可能耗时很长,如果是老我的项目,要对之前的代码做一个代码标准查看并批改的话,这可能就麻烦了,可能导致我的项目改变很大。所以这个 lint-staged,对团队我的项目和开源我的项目来说,是一个很好的工具,它是对集体要提交的代码的一个标准和束缚。
此时咱们曾经实现了监听 Git hooks,接下来咱们须要在 pre-commit 这个 hook 应用 Lint-staged 对代码进行 prettier 的自动化修复和 ESLint 的查看,如果发现不合乎代码标准的文件则间接退出 commit。
并且 Lint-staged 只会对 Git 暂存区(git add 的代码)内的代码进行查看而不是全量代码,且会主动将 prettier 格式化后的代码增加到此次 commit 中。
在 package.json 中配置
{ "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "*.{ts,tsx,js}": [ "eslint --fix", "prettier --write", "git add" ] },}
对于commit-msg的束缚,因为不同公司有各自的标准,本文暂不配置。
综上,一套残缺的Eslint + Prettier + husky + lint-staged前端代码工作流就搞定了。