创建项目
# npm 6.x
npm create vite@latest my-vue-app --template vue
# npm 7+, extra double-dash is needed:
npm create vite@latest my-vue-app -- --template vue
# yarn
yarn create vite my-vue-app --template vue
# pnpm
pnpm create vite my-vue-app --template vue
pnpm create vite my-react-app --template react-ts
Eslint
pnpm i eslint -D
# 生成 eslintrc 配置文件
npx eslint --init
// eslintrc.cjs
module.exports = {
env: {
browser: true,
es2021: true
},
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
'prettier'
],
overrides: [],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module'
},
plugins: ['react', '@typescript-eslint', 'prettier'],
rules: {
'prettier/prettier': 'error',
'@typescript-eslint/no-unused-vars': 'error' // 不允许存在未使用的变量
}
}
Prettier
pnpm i prettier eslint-config-prettier -D
# 运行 prettier 检测修复
npx prettier --write .
- 新增
.prettierrc配置文件
// 配置
{
"semi": false,
"tabWidth": 2,
"trailingComma": "none",
"singleQuote": true,
"arrowParens": "avoid"
}
-
.prettierignore配置忽略文件 -
配置
eslint+prettier
Installation
Install eslint-config-prettier:
npm install --save-dev eslint-config-prettier
# 避免 Prettier 格式化之后的代码导致 ESLint 报错会将 prettier 规则覆盖掉部分 eslint 规则
Then, add "prettier" to the "extends" array in your .eslintrc.* file. Make sure to put it last, so it gets the chance to override other configs.
{
"extends": [
"some-other-config-you-use",
"prettier"
]
}
Finally, run the CLI helper tool to find problems in the "rules" section of your .eslintrc.* file. (Remember, "rules" always “wins” over "extends"!)
- 接下来在
package.json的script中添加lint命令。
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"lint": "eslint --ext .js,.jsx,.ts,.tsx --fix --quiet ./",
},
eslint-plugin-prettier这个插件的主要作用就是将 prettier 作为 ESLint 的规则来使用,相当于代码不符合 Prettier 的标准时,会报一个 ESLint 错误,同时也可以通过 eslint --fix 来进行格式化。
pnpm i eslint-plugin-prettier -D
配置
eslint-plugin-prettierdoes not install Prettier or ESLint for you. You must install these yourself.
Then, in your
.eslintrc.json:
{
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error"
}
}
Git hooks
为了方便代码格式化,可以在每次commit代码之前执行prettier格式化代码,这就需要用到git hooks
- Install husky and lint-staged:
# husky git hooks 工具
# lint-staged 本地暂存代码检测工具
npm install --save-dev husky lint-staged
npx husky install
npm set-script prepare "husky install"
npx husky add .husky/pre-commit "npm run lint"
会在项目中生成一个 .husky 文件夹,存放 githooks 脚本,并会在每一次 git commit 之前都会先执行一次 npm run lint ,校验通过后才会提交代码
测试一下
npm run lint 会全局校验所有的文件,这就会导致一个问题,当你在开发A页面时,在提交的时候检测出B页面未通过lint校验,这时候我们改还是不改呢?
lint-staged 就是解决这个问题的,lint-staged只会检测本地已修改的文件,所以我们将 npm run lint 改成 npx lint-staged
lint-staged可在 package.json 中配置规则,也可新建 lint-staged.config.js 配置文件
module.exports = {
'src/**/*.{js,jsx,ts,tsx}': ['prettier --write', 'eslint --fix'],
'*.md': ['prettier --write']
}
npx husky add .husky/pre-commit "npx lint-staged --config lint-staged.config.cjs --allow-empty"
此时,在 commit 的时候会检验本地 add 过的文件,校验不通过的话会自动将文件进行 stash
commitlint
pnpm i @commitlint/cli @commitlint/config-conventional -D
-
commitlint检查您的commit message是否符合提交格式(@commitlint/config-conventional) -
commitlint-config-conventional(基于Angular的提交约定) -
加一个
pre-commit钩子,用于检测当前commit message是否符合规范
# # 在 shell 中我们会见到 $0、$1、$2这样的符号, 简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
Angular 提交约定
| 类型 | 描述 |
|---|---|
| build | 编译相关的修改,例如发布版本、对项目构建或者依赖的改动 |
| chore | 其他修改, 比如改变构建流程、或者增加依赖库、工具等 |
| ci | 持续集成修改 |
| docs | 文档修改 |
| feat | 新特性、新功能 |
| fix | 修改bug |
| perf | 优化相关,比如提升性能、体验 |
| refactor | 代码重构 |
| revert | 回滚到上一个版本 |
| style | 代码格式修改, 注意不是 css 修改 |
| test | 测试用例修改 |