vite创建vue3+ts项目
# vue-ts模板 --template vue-ts
yarn create vite my-vue-app --template vue-ts
cd my-vue-app
yarn
eslint配置
yarn add eslint --dev
# eslint初始化
yarn eslint --init
接下来会有一些选择帮助安装所需的依赖, 因为此项目是vue3+ts项目, 这一步将要安装的依赖有:
eslint-plugin-vue #校验vue
@typescript-eslint/eslint-plugin #校验ts
@typescript-eslint/parser #ts解析器
同时这一步eslint会为我们自动添加配置文件, 编辑.eslintrc.js文件:
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"parser": 'vue-eslint-parser',
"extends": [
"eslint:recommended",
"plugin:vue/vue3-recommended",
"plugin:@typescript-eslint/recommended"
],
"parserOptions": {
"ecmaVersion": 13,
"parser": "@typescript-eslint/parser",
"sourceType": "module"
},
"plugins": [
"vue",
"@typescript-eslint"
],
"rules": {
}
};
在package.json中添加一条新的script
"lint": "eslint --ext .ts,.vue src"
运行命令测试是否生效
yarn lint
prettier配置
# 安装固定版本的prettier
yarn add prettier --dev --exact
手动创建prettier配置文件 .prettierrc.js.
module.exports = {
// 一行最多 80 字符
printWidth: 80,
// 使用 2 个空格缩进
tabWidth: 2,
// 不使用缩进符,而使用空格
useTabs: false,
// 行尾需要有分号
semi: true,
// 使用单引号
singleQuote: true,
// 对象的 key 仅在必要时用引号
quoteProps: 'as-needed',
// jsx 不使用单引号,而使用双引号
jsxSingleQuote: false,
// Trailing commas where valid in ES5 (objects, arrays, etc.). No trailing commas in type parameters in TypeScript.
trailingComma: 'es5',
// 大括号内的首尾需要空格
bracketSpacing: true,
// 首标签结尾的尖括号 > 单列一行
bracketSameLine: false,
// 箭头函数,只有一个参数的时候,也需要括号
arrowParens: 'always',
// 每个文件格式化的范围是文件的全部内容
rangeStart: 0,
rangeEnd: Infinity,
// 不需要写文件开头的 @prettier
requirePragma: false,
// 不需要自动在文件开头插入 @prettier
insertPragma: false,
// 使用默认的折行标准
proseWrap: 'preserve',
// 根据显示样式决定 html 要不要折行
htmlWhitespaceSensitivity: 'css',
// 换行符使用 lf
endOfLine: 'lf',
};
不创建配置文件prettier也可以正常使用, prettier会按照默认配置处理文件.还可以创建.prettierignore文件, 用途是配置忽略格式化的文件, 其实用途和语法和.gitignore都是一样的.
下一步就是处理eslint和prettier可能发生冲突的情况. eslint+prettier配合使用的原则是eslint负责代码质量检查,prettier负责代码格式化.
安装 eslint-config-prettier
yarn add eslint-config-prettier --dev
修改 .eslintrc.js
module.exports = {
...
extends: [
...
'prettier' // 写在最后一位
],
...
}
在package.json中添加一条新的script
"prettier": "prettier --write ."
运行命令测试是否生效
yarn prettier
然后我们可以在ide上安装eslint和prettier对应的插件, 这里推荐使用vscode作为ide, 它有丰富的插件支持.
安装vscode的插件后可以修改vscode的setting.json文件增强插件的功能.
"eslint.validate": [ // 被eslint检查的文件类型
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue"
],
"editor.defaultFormatter": "esbenp.prettier-vscode", // 默认格式化插件
husky & lint-staged 配置
只差最后一块拼图了, 我们希望什么时候进行代码质量校验和格式化呢? 考虑到通用性,最好的时机就是在每次提交新修改的时候. 因为如果将检查的范围放得更大或者更无时无刻, 可能会改动无需修改的旧代码, 引起未知的错误和无意义的提交信息.
husky插件的作用就是在git hook中添加操作, lint-staged则可以准确的定位到暂存区的代码并对其操作, 两个插件搭配使用即可完成自动化的代码质量校验和格式化链.
yarn add husky lint-staged --dev
# 初始化husky
npx husky-init && yarn
修改 .husky/pre-commit 文件
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
修改 package.json 文件
"scripts": { ... },
"lint-staged": {
"src/**/*.{ts,vue}": [
"yarn prettier:fix", // 可以执行你定义的命令行
"yarn lint:fix",
"eslint --fix", // 也可以执行常用的linters命令
"prettier --write",
]
},
...
除了校验代码本身外,还可以对git commit msg进行约束。这一步在另一个hook commit-msg中实现。额外引入commitlint包校验commit msg的格式。
# 安装commitlint
yarn add @commitlint/{config-conventional,cli} --dev
# 创建配置文件
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
# 添加hook
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
# commitlint的默认格式如下,支持自定义
type(scope?): subject
随便改点代码,提交一下,大功告成!