脚手架创建项目时已选择安装ESLint,可直接从step2开始
step 1️⃣ 相关依赖下载
配置清单
| VSCode插件清单 | 依赖清单 | 功能说明 |
|---|---|---|
| ESLint v2.2.2 | eslint@6.8.0 | 代码检查核心包 |
| Prettier v9.1.0 | eslint-friendly-formatter@4.0.1 | 友好处理报错行信息,可直接定位具体报错位置 |
| Vetur v0.35.0 | eslint-plugin-vue@6.2.2 | 校验Vue单文件规则 |
| prettier@1.19.1 | 代码风格统一 | |
| eslint-plugin-prettier@3.3.1 | 让ESLint调用Prettier格式化代码 | |
| eslint-config-prettier@6.0.0 | 去掉ESLint中Prettier里已经重复定义的项 | |
| @typescript-eslint/eslint-plugin@2.34.0 | 校验ts的一些规则 | |
| @typescript-eslint/parser@2.34.0 | 解析typescript | |
| eslint-loader | webpack转换eslint语法 |
1.1 安装依赖
-
//npm i 上面表格中提到的依赖 -D npm i eslint@6.8.0 eslint-friendly-formatter@4.0.1 eslint-plugin-vue@6.2.2 eslint-plugin-prettier@3.3.1 eslint-config-prettier@6.0.0 prettier@1.19.1 -D //TS 项目 npm i @typescript-eslint/eslint-plugin@2.34.0 @typescript-eslint/parser@2.34.0 -D
1.2 初始化配置文件
-
eslint --init
1.3 webpack
rules: [
// ...
{
test: /.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [ path.resolve(commonDir, '../index.js'), resolve('./pages'), resolve('./components')], //
options: {
formatter: require('eslint-friendly-formatter')
}
}
]
step 2️⃣ 项目配置
2.1 新建eslintrc.js文件
在根目录下新建eslintrc.js文件,该文件中定义了ESLint的基础配置
module.exports = {
root: true,
env: {
node: true,
browser: true,
es6: true
},
extends: [
'plugin:vue/essential',
"plugin:prettier/recommended", //解决 eslint 和 prettier 校验重复部分
'eslint:recommended',
'@vue/typescript/recommended',//cli3.X or cli4.X
//'plugin:@typescript-eslint/recommended',//cli2.X
'prettier/@typescript-eslint',
],
// 优先级低于parser的语法解析配置
parserOptions: {
ecmaVersion: 2020,
sourceType: "module"
},
// 默认前缀 eslint-plugin-
// plugins: ['vue'],
rules: {
eqeqeq: ['off'],
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'space-before-blocks': [2, 'always'],
'comma-dangle': [2, 'never'],
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/camelcase': 'off',
'no-unused-vars': 'off',
},
overrides: [{
files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'],
env: {
jest: true
}
}]
};
2.2 新建prettier.config.js
module.exports = {
// 一行最多 100 字符
printWidth: 100,
// 使用 4 个空格缩进
tabWidth: 4,
// 不使用缩进符,而使用空格
useTabs: false,
// 行尾需要有分号
semi: true,
// 使用单引号
singleQuote: true,
// 对象的 key 仅在必要时用引号
quoteProps: 'as-needed',
// jsx 不使用单引号,而使用双引号
jsxSingleQuote: false,
// 末尾不需要逗号
trailingComma: 'none',
// 大括号内的首尾需要空格
bracketSpacing: true,
// jsx 标签的反尖括号需要换行
jsxBracketSameLine: false,
// 箭头函数,只有一个参数的时候,也需要括号
arrowParens: 'always',
// 每个文件格式化的范围是文件的全部内容
rangeStart: 0,
rangeEnd: Infinity,
// 不需要写文件开头的 @prettier
requirePragma: false,
// 不需要自动在文件开头插入 @prettier
insertPragma: false,
// 行尾换行格式
endOfLine: 'auto',
// 根据显示样式决定 html 要不要折行
htmlWhitespaceSensitivity: 'css'
};
2.3修改vscode中的settings.json
在原有基础上新增即可
{
...
//code format config start
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"[vue]": {
"editor.defaultFormatter": "octref.vetur"
},
"[javascript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[typescript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
// #每次保存的时候自动格式化
"editor.formatOnSave": true,
"eslint.enable": true, //是否开启vscode的eslint
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
},
"eslint.validate": [
"javascript",
"javascriptreact",
{
"language": "html",
"autoFix": true
},
{
"language": "vue",
"autoFix": true
},
{
"language": "typescript",
"autoFix": true
},
{
"language": "typescriptreact",
"autoFix": true
}
],
"vetur.format.defaultFormatter.js": "vscode-typescript",
"vetur.format.defaultFormatterOptions": {
"js-beautify-html": {
"wrap_attributes": "force-aligned"
}
},
//end
...
}
- \