eslint 相关的配置说明
- 不校验某个文件,文件顶部加
<!-- eslint-disable -->
; 不校验当前行// eslint-disable-line
- ts 文件中
// @ts-ignore
安装
npm init @eslint/config
已经有配置文件可以直接安装yarn add eslint
这里配置的结果是校验 vue3 的语法
选择了 enforce code style 会多装几个包,处理代码格式 选择 airbnd 会校验更严格 eslint-config-standard | eslint-config-airbnb-base eslint-plugin-import eslint-plugin-n eslint-plugin-promise
同时会多出一个配置 extends: ['airbnb-base'|standard]
初始化的 vue3+vite 项目装 airbnb eslint 不生效(待验证什么原因)
如果要降级 vue2 语法校验,可以将 .eslintrc.js
中的 extends
下的 plugin:vue/vue3-essential
改为 plugin:vue/recommended
参考: https://eslint.vuejs.org/user-guide/
要为特定类型的文件指定处理器,请使用 overrides 键和 processor https://eslint.bootcss.com/docs/user-guide/configuring
安装 vscode 插件
【ESLint】 插件配置 https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint#settings-options 创建
.eslintrc.js
【EditorConfig for VS Code】: 该插件与 eslint 可以做部分配合工作 设置代码规范 配置
.editorconfig
文件
# 设为true时,才会停止查找.editorconfig文件
root = true
[*]
charset = utf-8
[*.{js,cjs,vue,json}]
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
end_of_line = crlf
insert_final_newline = true
# indent_style 设置缩进风格(tab是硬缩进,space为软缩进)
# indent_size 用一个整数定义的列数来设置缩进的宽度,如果indent_style为tab,则此属性默认为tab_width
# tab_width 用一个整数来设置tab缩进的列数。默认是indent_size
# end_of_line 设置换行符,值为lf、cr和crlf
# charset 设置编码,值为latin1、utf-8、utf-8-bom、utf-16be和utf-16le,不建议使用utf-8-bom
# trim_trailing_whitespace 设为true表示会去除换行行首的任意空白字符。
# insert_final_newline 设为true表示使文件以一个空白行结尾
vscode 插件和 npm 包差异
vscode 安装的 eslint 和 prettier 插件,如果项目中有配置文件,会读取配置文件,然后检查代码格式化文件
npm 安装的包,只有运行命令行的时候检查代码 在命令行给出提示,如果只安装了 npm 包,vscode 是不会有提示的
忽略的文件 .eslintignore
参考 .gitignore
.eslintrc.js
文件 或其它的配置文件
module.exports = {
env: {
node: true // 使用 require 和 module.exports 不会报错
},
rules: {
/*
'off':0 'warn':1 'error':2
*/
// ts any 的使用 Unexpected any. Specify a different type
'@typescript-eslint/no-explicit-any': ['off'],
// 允许使用console
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
indent: [
'error',
4 // 结合 editorconfig
],
// https://eslint.org/docs/latest/rules/comma-dangle
// 当最后一个元素或属性与结尾的 ]或 } 在不同行时,需要使用逗号,当最后一个元素或属性与结尾的 ]或 } 在同一行时,不允许使用逗号。
'comma-dangle': ['error', 'always-multiline'],
'no-tabs': 'off' // Unexpected tab character
/* 官方文档说不推荐,目前还能用 20231228 */
'max-len': ['error', { code: 160 }],
/* 最大行数 */
'max-lines': ['error', { max: 600, skipBlankLines: true, skipComments: true }],
// 即使没有 babelrc 配置文件,也使用 babel-eslint 来解析
requireConfigFile: false,
quotes: ['error', 'single'], // 单引号
semi: ['error', 'never'], // 分号
'quote-props': [2, 'as-needed'], // 对象属性,根据需要添加引号 如 'zz-xxx' zzXxx
// 关闭校验 Promise.reject() 传入的是 error https://eslint.org/docs/latest/rules/prefer-promise-reject-errors
'prefer-promise-reject-errors': ['off'],
/**
* eslint 针对vue的插件*( eslint-plugin-vue ) 可以配置一些校验规则 https://eslint.vuejs.org/
*/
// 配置 Parsing error: x-invalid-end-tag 其它相关的查阅 https://eslint.vuejs.org/rules/no-parsing-error.html
'vue/no-parsing-error': ['error', {
'x-invalid-namespace': false
}],
// 当报错 Component name should always be multi-word 时设置
'vue/multi-word-component-names': 0,
'vue/max-attributes-per-line': ['error', {
'singleline': {
'max': 12,
},
'multiline': {
'max': 1,
}
}], // 属性换行配置
// html 缩进 这里是4个空格
'vue/html-indent': ['error', 4, {
baseIndent: 1,
}],
// html 文件组后一行报错;实际官方用途 令 <template> 内也支持 ESLint 的注释指令。
'vue/comment-directive': 'off',
/* 属性是否用 - 连接, 可以加 ignore https://eslint.vuejs.org/rules/attribute-hyphenation.html */
"vue/attribute-hyphenation": ["error", "never", {
"ignore": []
}],
/* 定义 vue 文件中 template scritpt style 模块的顺序 */
"vue/block-order": ["error", {
"order": ["template", "script", "style"]
}],
/* 组件名称必须是 多个单词 */
'vue/multi-word-component-names': ['error', {
ignores: [],
}],
'prettier/prettier': 2 // 将 prettier 的报错信息提示改为 error 级别
},
// 允许一些全局的变量,如在html中引入的高德地图全局变量
globals: {
AMap: true,
Vue: true,
VueRouter: true,
ELEMENT: true,
AMapUI: true
}
}
prettier
由于最新官网推荐 用命令来格式化所有文件 所以暂时不推荐用 https://github.com/vuejs/eslint-config-prettier 【20231221】
vscode 需要装插件
Prettier- Code forematter
eslint 更注重于语法,prettier 更关注于格式
Prettier 是一个代码格式化工具,可以格式化代码,但不具备代码检查功能
prettier3.7 以上会优先读取项目根目录下的
.editorconfig or prettier config
如果有,不会使用 vscode setting 中的设置如果项目中有 .prettierrc 文件 VSCode 的 prettier 插件的配置将失效
配置
.prettierrc.json
https://www.prettier.cn/docs/options.html
{
/* https://www.prettier.cn/docs/options.html#arrow-function-parentheses */
/* 默认 80 单行长度 */
"printWidth": 110,
/* 默认 always (x) => x */
"arrowParens": "always",
/* 默认 fasle html 标签 首标签的结尾 > 不用换行 */
"bracketSameLine": false,
/* 默认 true { name: 'hew' } 对象花括号内部前后添加空格 */
"bracketSpacing": true,
/* 默认 lf 换行符 lf crlf cr auto */
"endOfLine": "lf",
/* 默认 false JSX 中用 单引号 */
"jsxSingleQuote": true,
/* 默认 as-needed 对象字段是否用 引号,默认是该用的时候就用 */
"quoteProps": "as-needed",
/* 默认 true 行尾是否需要分号 */
"semi": false,
/* 默认 false 一个属性必须单独占一行 */
"singleAttributePerLine": true,
/* 默认 false 是否使用单引号 */
"singleQuote": true,
/* 默认 false 关闭 tab 缩进 */
"useTabs": false,
/* 默认 2 使用2个space缩进 */
"tabWidth": 4,
/* 默认 all 结尾逗号 es5 表示有效的 逗号*/
"trailingComma": "all",
/* 默认 false vue 文件中 是否缩进 style 和 script */
"vueIndentScriptAndStyle": false,
/* 默认 false jsx 标签的 > 是否需要换行 */
"jsxBracketSameLine": false,
/* 默认 false 不用在顶部加注释即可格式化 @prettier 或者 @format */
"requirePragma": false,
/* 默认 false 当文件被格式化后,在顶部生成 @format 标记 */
"insertPragma": false,
/* 默认 css HTML文件的全局空白区域,默认是按照 css 属性识别即可 */
"htmlWhitespaceSensitivity": "css",
/* 默认 -1 格式化后 光标移动到哪里 */
"cursorOffset": -1,
/* 默认 auto 是否对嵌入的代码格式化 */
"embeddedLanguageFormatting": "auto",
/* 默认 ‘’ 指定用什么解析器 一般不用于配置文件 */
"filepath": "",
/* 默认 会自动识别文件 然后解析 所以不用修改, 常规的语言都基本支持 */
"parser": "",
/* 默认 preserve 段落文本 是否换行,默认是不处理 */
"proseWrap": "preserve",
/* 每个文件的格式化范围 */
"rangeStart": 0,
/* 每个文件的格式化范围 */
"rangeEnd": null
}
Prettier 和 Eslint 结合使用
根据脚手架搭建时,选择两者初始化安装
编辑器 安装对应的插件