- 1. Eslint配置指南
- 1.1. 安装 ESLint
- 1.2. 生成配置文件
- 1.3. 修改配置文件
- 1.4. 创建
.eslintignore
文件 - 1.5. 运行 ESLint
- 1.6. 整合到编辑器/IDE
- 1.7. 自动修复
- 2. 配置prettier
- 2.1. 安装依赖包
- 2.2. .prettierrc.json添加规则
- 2.3. .prettierignore忽略文件
- 2.4. 保存自动格式化
- 3. eslint-config-win
- 3.1. 安装
- 3.2. 依赖版本
- 3.3. 用法
- 3.3.1. Vue
- 3.4. Vue3 新增规则
- 3.5. 参考
- 3.6. 开发维护
- 4. eslint配置举例
1. Eslint配置指南
ESLint 是一个强大的代码检查工具,用于识别 JavaScript 和其他支持的语言中的常见编程错误,并强制执行一致的编码风格。
ESLint最初是由Nicholas C. Zakas 于2013年6月创建的开源项目。
ESLint 是一个开源的 JavaScript 代码检查工具,它是用来进行代码的校验,检测代码中潜在的问题,比如某个变量定义了未使用、函数定义的参数重复、变量名没有按规范命名等等。
中文官网:https://zh-hans.eslint.org/
英文官网:https://eslint.org/
下面是一个基本的 ESLint 配置指南,帮助你开始使用它来提升代码质量。
1.1. 安装 ESLint
首先,你需要在项目中安装 ESLint。如果你的项目是一个 Node.js 应用,通常会将其作为开发依赖安装:
npm install eslint --save-dev
// 或者使用 yarn
yarn add eslint --dev
1.2. 生成配置文件
ESLint 支持多种格式的配置文件,包括 .eslintrc.js
, .eslintrc.yaml
, .eslintrc.yml
, .eslintrc.json
, 以及直接在 package.json
中的 "eslintConfig"
字段。你可以根据需要选择合适的格式。
要生成配置文件,可以运行:
npx eslint --init
这会引导你进行一系列问题的回答,根据你的回答自动生成配置。
例如,你可以选择你的环境(浏览器、Node.js等)、想要遵循的编码规范(如 Airbnb、Google、Standard等)以及是否要支持某些语言特性(比如 Vue.js 或 React)。
1.3. 修改配置文件
生成的 .eslintrc.*
文件包含了 ESLint 的基础配置。你可以手动编辑这个文件来调整规则,添加或移除规则,或改变规则的严格程度。配置文件通常看起来像这样:
// .eslintrc.js 示例
// @see https://eslint.bootcss.com/docs/rules/
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
jest: true,
},
/* 指定如何解析语法 */
parser: 'vue-eslint-parser',
/** 优先级低于 parse 的语法解析配置 */
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
parser: '@typescript-eslint/parser',
jsxPragma: 'React',
ecmaFeatures: {
jsx: true,
},
},
/* 继承已有的规则 */
extends: [
'eslint:recommended',
'plugin:vue/vue3-essential',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
plugins: ['vue', '@typescript-eslint'],
/*
* "off" 或 0 ==> 关闭规则
* "warn" 或 1 ==> 打开的规则作为警告(不影响代码执行)
* "error" 或 2 ==> 规则作为一个错误(代码不能执行,界面报错)
*/
rules: {
// eslint(https://eslint.bootcss.com/docs/rules/)
'no-var': 'error', // 要求使用 let 或 const 而不是 var
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-unexpected-multiline': 'error', // 禁止空余的多行
'no-useless-escape': 'off', // 禁止不必要的转义字符
// typeScript (https://typescript-eslint.io/rules)
'@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
'@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
'@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间。
'@typescript-eslint/semi': 'off',
// eslint-plugin-vue (https://eslint.vuejs.org/rules/)
'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用
'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
},
}
1.4. 创建 .eslintignore
文件
你可以创建一个 .eslintignore
文件来指定 ESLint 应该忽略哪些文件或目录。这与 .gitignore
类似,每一行一个路径模式。
例如:
/node_modules/
/dist/
/build/
1.5. 运行 ESLint
安装并配置好后,可以在命令行中运行 ESLint 来检查你的代码:
npx eslint yourfile.js
// 或者检查整个项目
npx eslint .
1.6. 整合到编辑器/IDE
大多数现代代码编辑器(如 VSCode, WebStorm等)都支持 ESLint 插件,允许你在编写代码时实时看到 ESLint 的警告和错误,并提供快速修复选项。确保安装对应的插件并启用它。
1.7. 自动修复
ESLint 提供了一个自动修复功能,可以尝试修复一些简单的警告和错误:
npx eslint --fix yourfile.js
// 或者修复整个项目
npx eslint --fix .
package.json新增两个运行脚本
"scripts": {
"lint": "eslint src",
"fix": "eslint src --fix",
}
以上就是 ESLint 的基本配置指南。随着项目的进展,你可能需要根据团队的编码规范进一步定制配置。记得定期更新 ESLint 及其插件以获取最新的规则和支持。
更多详细内容,请微信搜索“前端爱好者
“, 戳我 查看 。
2. 配置prettier
有了eslint,为什么还要有prettier?
eslint针对的是javascript,他是一个检测工具,包含js语法以及少部分格式问题,在eslint看来,语法对了就能保证代码正常运行,格式问题属于其次;
而prettier属于格式化工具,它看不惯格式不统一,所以它就把eslint没干好的事接着干,另外,prettier支持包含js在内的多种语言。
总结起来,eslint和prettier这俩兄弟一个保证js代码质量,一个保证代码美观。
来到VS Code安装其对应的插件。
2.1. 安装依赖包
npm install -D eslint-plugin-prettier prettier eslint-config-prettier
yarn add -D eslint-plugin-prettier prettier eslint-config-prettier
pnpm install -D eslint-plugin-prettier prettier eslint-config-prettier
同样是在src同级目录下安装.prettierrc.json文件夹
2.2. .prettierrc.json添加规则
{
"printWidth": 120,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"singleQuote": true,
"bracketSpacing": true,
"trailingComma": "all",
"jsxSingleQuote": false,
"arrowParens": "avoid",
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "strict",
"endOfLine": "auto"
}
2.3. .prettierignore忽略文件
/dist/*
/html/*
.local
/node_modules/**
**/*.svg
**/*.sh
/public/*
通过pnpm run lint去检测语法,如果出现不规范格式,通过pnpm run fix 修改
2.4. 保存自动格式化
想要按 Ctrl+S 保证的自动按eslint规则格式化代码的话,找到 .vscode 文件,内部新建个 setting.json 文件夹
setting.json 写入代码
{
"editor.formatOnType": true,
"editor.formatOnSave": true,
"eslint.codeAction.showDocumentation": {
"enable": true
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": ["javascript", "javascriptreact", "html", "vue"]
}
3. eslint-config-win
此规则适用于 JavaScript/Vue 项目的 ESLint 配置规范。
目前已支持 Vue 3.0,需要指定 extends 配置vue3
https://gitee.com/braden/eslint-config-win?spm=5176.28575747.0.0.ff1f2adcn7ydP7
3.1. 安装
yarn add @winner-fed/eslint-config-win -D
3.2. 依赖版本
eslint ^7.32.0
@babel/eslint-parser ^7.15.8
vue-eslint-parser ^7.11.0
eslint-plugin-vue ^7.20.0
Tips:如果项目中没有安装此依赖包或者版本不一致,请安装或者升级。
3.3. 用法
- 在你的项目的根目录下创建一个
.eslintrc.js
文件,并将以下内容复制进去:
module.exports = {
extends: [
'@winner-fed/win',
],
env: {
// 你的环境变量(包含多个预定义的全局变量)
//
// browser: true,
// node: true,
// mocha: true,
// jest: true,
// jquery: true
},
globals: {
// 你的全局变量(设置为 false 表示它不允许被重新赋值)
//
// myGlobal: false
},
rules: {
// 自定义你的规则
}
};
- 项目目录下的
package.json
添加检测指令,举个例子
{
...
"scripts": {
+ "lint:es": "eslint \"src/**/*.{vue,js,jsx}\" --fix",
}
...
}
3.3.1. Vue
npm install --save-dev eslint babel-eslint vue-eslint-parser eslint-plugin-vue @winner-fed/eslint-config-win
在你的项目的根目录下创建一个 .eslintrc.js
文件,并将以下内容复制进去:
module.exports = {
extends: [
'@winner-fed/win',
// 这里是针对 vue2 的配置
'@winner-fed/win/vue',
// 如果是 vue3 的项目工程,则推荐下面配置
// '@winner-fed/win/vue3',
],
env: {
// 你的环境变量(包含多个预定义的全局变量)
//
// browser: true,
// node: true,
// mocha: true,
// jest: true,
// jquery: true
},
globals: {
// 你的全局变量(设置为 false 表示它不允许被重新赋值)
//
// myGlobal: false
},
rules: {
// 自定义你的规则
}
};
3.4. Vue3 新增规则
rule | 规则描述 |
---|---|
vue/custom-event-name-casing | 自定义事件名必须用 kebab-case 风格 |
vue/no-arrow-functions-in-watch | watch 中禁止使用箭头函数 |
vue/no-custom-modifiers-on-v-model | 禁止自定义的 v-modal 修饰语 |
vue/no-deprecated-data-object-declaration | 禁止在 data 中使用已废弃的对象定义 |
vue/no-deprecated-destroyed-lifecycle | 禁止使用已废弃的 destroyed 和 beforeDestroy 生命周期 |
vue/no-deprecated-dollar-listeners-api | 禁止使用已废弃的 $listeners |
vue/no-deprecated-dollar-scopedslots-api | 禁止使用已废弃的 $scopedSlots |
vue/no-deprecated-events-api | 禁止使用已废弃的 events 接口 |
vue/no-deprecated-filter | 禁止使用已废弃的 filters 语法 |
vue/no-deprecated-functional-template | 禁止使用已废弃的 functional 模版 |
vue/no-deprecated-html-element-is | 禁止使用已废弃的 is 属性 |
vue/no-deprecated-inline-template | 禁止使用已废弃的 inline-template 属性 |
vue/no-deprecated-props-default-this | 禁止使用已废弃的 this |
vue/no-deprecated-v-bind-sync | 禁止在 v-bind 指令中使用已废弃的 .sync 修饰符 |
vue/no-deprecated-v-on-native-modifier | 禁止使用已废弃的 .native 修饰符 |
vue/no-deprecated-v-on-number-modifiers | 禁止使用已废弃的数字修饰符 |
vue/no-deprecated-vue-config-keycodes | 禁止使用已废弃的 Vue.config.keyCodes |
vue/no-dupe-v-else-if | 禁止在 v-if 和 v-else-if 中出现重复的测试表达式 |
vue/no-duplicate-attr-inheritance | 使用 v-bind=“$attrs” 时 inheritAttrs 必须是 false |
vue/no-empty-component-block | 禁止 <template> <script> <style> 为空 |
vue/no-invalid-model-keys | 禁止 model 中出现错误的属性 |
vue/no-lifecycle-after-await | 禁止异步注册生命周期 |
vue/no-lone-template | 禁止出现没必要的 <template> |
vue/no-multiple-objects-in-class | 禁止 class 中出现复数的对象 |
vue/no-multiple-slot-args | 禁止给 scoped slots 传递多个参数 |
vue/no-multiple-template-root | 禁止模版中有多个根节点 |
vue/no-mutating-props | 禁止修改组件的 props |
vue/no-ref-as-operand | 禁止直接使用由 ref 生成的变量,必须使用它的 value |
vue/no-setup-props-destructure | 禁止对 setup 中的 props 解构 |
vue/no-sparse-arrays | 禁止在数组中出现连续的逗号 |
vue/no-useless-concat | 禁止没必要的字符拼接 |
vue/no-useless-mustaches | 禁止出现无用的 mustache 字符串 |
vue/no-useless-v-bind | 禁止出现无用的 v-bind |
vue/no-v-for-template-key | 禁止 template 有 v-for 属性时又有 key 属性 |
vue/no-v-for-template-key-on-child | 禁止 template v-for 属性的子节点有 key 属性 |
vue/no-watch-after-await | 禁止在 await 之后调用 watch |
vue/one-component-per-file | 一个文件必须仅包含一个组件 |
vue/order-in-components | 组件的属性必须为一定的顺序 |
vue/require-explicit-emits | emits 属性必须包含 $emit() 中的值 |
vue/require-slots-as-functions | this.$slots.default 必须被当作方法使用 |
vue/require-toggle-inside-transition | transition 内部必须有条件指令 |
vue/return-in-emits-validator | emits 中的方法必须有返回值 |
vue/v-on-event-hyphenation | 禁止在 v-on 的事件名使用横杠 |
vue/valid-v-is | v-is 指令必须合法 |
3.5. 参考
- ESlint Code Guide
- ESlint Shareable Config
- eslint-config-alloy
3.6. 开发维护
- 以测试开发驱动,config/rules/*.json 文件都是根据 test/ 文件夹对应的生成的
4. eslint配置举例
{
"rules" : {
// 定义对象的set存取器属性时,强制定义get
"accessor-pairs": 2,
// 指定数组的元素之间要以空格隔开(,后面), never参数:[ 之前和 ] 之后不能带空格,always参数:[ 之前和 ] 之后必须带空格
"array-bracket-spacing": [2, "never"],
// 在块级作用域外访问块内定义的变量是否报错提示
"block-scoped-var": 0,
// if while function 后面的{必须与if在同一行,java风格。
"brace-style": [2, "1tbs", { "allowSingleLine": true }],
// 双峰驼命名格式
"camelcase": 2,
// 数组和对象键值对最后一个逗号, never参数:不能带末尾的逗号, always参数:必须带末尾的逗号,
// always-multiline:多行模式必须带逗号,单行模式不能带逗号
"comma-dangle": [2, "never"],
// 控制逗号前后的空格
"comma-spacing": [2, { "before": false, "after": true }],
// 控制逗号在行尾出现还是在行首出现
// http://eslint.org/docs/rules/comma-style
"comma-style": [2, "last"],
// 圈复杂度
"complexity": [2,9],
// 以方括号取对象属性时,[ 后面和 ] 前面是否需要空格, 可选参数 never, always
"computed-property-spacing": [2,"never"],
// 强制方法必须返回值,TypeScript强类型,不配置
"consistent-return": 0,
// 用于指统一在回调函数中指向this的变量名,箭头函数中的this已经可以指向外层调用者,应该没卵用了
// e.g [0,"that"] 指定只能 var that = this. that不能指向其他任何值,this也不能赋值给that以外的其他值
"consistent-this": 0,
// 强制在子类构造函数中用super()调用父类构造函数,TypeScrip的编译器也会提示
"constructor-super": 0,
// if else while for do后面的代码块是否需要{ }包围,参数:
// multi 只有块中有多行语句时才需要{ }包围
// multi-line 只有块中有多行语句时才需要{ }包围, 但是块中的执行语句只有一行时,
// 块中的语句只能跟和if语句在同一行。if (foo) foo++; else doSomething();
// multi-or-nest 只有块中有多行语句时才需要{ }包围, 如果块中的执行语句只有一行,执行语句可以零另起一行也可以跟在if语句后面
// [2, "multi", "consistent"] 保持前后语句的{ }一致
// default: [2, "all"] 全都需要{ }包围
"curly": [2, "all"],
// switch语句强制default分支,也可添加 // no default 注释取消此次警告
"default-case": 2,
// 强制object.key 中 . 的位置,参数:
// property,'.'号应与属性在同一行
// object, '.' 号应与对象名在同一行
"dot-location": [2, "property"],
// 强制使用.号取属性
// 参数: allowKeywords:true 使用保留字做属性名时,只能使用.方式取属性
// false 使用保留字做属性名时, 只能使用[]方式取属性 e.g [2, {"allowKeywords": false}]
// allowPattern: 当属性名匹配提供的正则表达式时,允许使用[]方式取值,否则只能用.号取值 e.g [2, {"allowPattern": "^[a-z]+(_[a-z]+)+$"}]
"dot-notation": [2, {"allowKeywords": true}],
// 文件末尾强制换行
"eol-last": 2,
// 使用 === 替代 ==
"eqeqeq": [2, "allow-null"],
// 方法表达式是否需要命名
"func-names": 0,
// 方法定义风格,参数:
// declaration: 强制使用方法声明的方式,function f(){} e.g [2, "declaration"]
// expression:强制使用方法表达式的方式,var f = function() {} e.g [2, "expression"]
// allowArrowFunctions: declaration风格中允许箭头函数。 e.g [2, "declaration", { "allowArrowFunctions": true }]
"func-style": 0,
"no-alert": 0,//禁止使用alert confirm prompt
"no-array-constructor": 2,//禁止使用数组构造器
"no-bitwise": 0,//禁止使用按位运算符
"no-caller": 1,//禁止使用arguments.caller或arguments.callee
"no-catch-shadow": 2,//禁止catch子句参数与外部作用域变量同名
"no-class-assign": 2,//禁止给类赋值
"no-cond-assign": 2,//禁止在条件表达式中使用赋值语句
"no-console": 2,//禁止使用console
"no-const-assign": 2,//禁止修改const声明的变量
"no-constant-condition": 2,//禁止在条件中使用常量表达式 if(true) if(1)
"no-continue": 0,//禁止使用continue
"no-control-regex": 2,//禁止在正则表达式中使用控制字符
"no-debugger": 2,//禁止使用debugger
"no-delete-var": 2,//不能对var声明的变量使用delete操作符
"no-div-regex": 1,//不能使用看起来像除法的正则表达式/=foo/
"no-dupe-keys": 2,//在创建对象字面量时不允许键重复 {a:1,a:1}
"no-dupe-args": 2,//函数参数不能重复
"no-duplicate-case": 2,//switch中的case标签不能重复
"no-else-return": 2,//如果if语句里面有return,后面不能跟else语句
"no-empty": 2,//块语句中的内容不能为空
"no-empty-character-class": 2,//正则表达式中的[]内容不能为空
"no-empty-label": 2,//禁止使用空label
"no-eq-null": 2,//禁止对null使用==或!=运算符
"no-eval": 1,//禁止使用eval
"no-ex-assign": 2,//禁止给catch语句中的异常参数赋值
"no-extend-native": 2,//禁止扩展native对象
"no-extra-bind": 2,//禁止不必要的函数绑定
"no-extra-boolean-cast": 2,//禁止不必要的bool转换
"no-extra-parens": 2,//禁止非必要的括号
"no-extra-semi": 2,//禁止多余的冒号
"no-fallthrough": 1,//禁止switch穿透
"no-floating-decimal": 2,//禁止省略浮点数中的0 .5 3.
"no-func-assign": 2,//禁止重复的函数声明
"no-implicit-coercion": 1,//禁止隐式转换
"no-implied-eval": 2,//禁止使用隐式eval
"no-inline-comments": 0,//禁止行内备注
"no-inner-declarations": [2, "functions"],//禁止在块语句中使用声明(变量或函数)
"no-invalid-regexp": 2,//禁止无效的正则表达式
"no-invalid-this": 2,//禁止无效的this,只能用在构造器,类,对象字面量
"no-irregular-whitespace": 2,//不能有不规则的空格
"no-iterator": 2,//禁止使用__iterator__ 属性
"no-label-var": 2,//label名不能与var声明的变量名相同
"no-labels": 2,//禁止标签声明
"no-lone-blocks": 2,//禁止不必要的嵌套块
"no-lonely-if": 2,//禁止else语句内只有if语句
"no-loop-func": 1,//禁止在循环中使用函数(如果没有引用外部变量不形成闭包就可以)
"no-mixed-requires": [0, false],//声明时不能混用声明类型
"no-mixed-spaces-and-tabs": [2, false],//禁止混用tab和空格
"linebreak-style": [0, "windows"],//换行风格
"no-multi-spaces": 1,//不能用多余的空格
"no-multi-str": 2,//字符串不能用\换行
"no-multiple-empty-lines": [1, {"max": 2}],//空行最多不能超过2行
"no-native-reassign": 2,//不能重写native对象
"no-negated-in-lhs": 2,//in 操作符的左边不能有!
"no-nested-ternary": 0,//禁止使用嵌套的三目运算
"no-new": 1,//禁止在使用new构造一个实例后不赋值
"no-new-func": 1,//禁止使用new Function
"no-new-object": 2,//禁止使用new Object()
"no-new-require": 2,//禁止使用new require
"no-new-wrappers": 2,//禁止使用new创建包装实例,new String new Boolean new Number
"no-obj-calls": 2,//不能调用内置的全局对象,比如Math() JSON()
"no-octal": 2,//禁止使用八进制数字
"no-octal-escape": 2,//禁止使用八进制转义序列
"no-param-reassign": 2,//禁止给参数重新赋值
"no-path-concat": 0,//node中不能使用__dirname或__filename做路径拼接
"no-plusplus": 0,//禁止使用++,--
"no-process-env": 0,//禁止使用process.env
"no-process-exit": 0,//禁止使用process.exit()
"no-proto": 2,//禁止使用__proto__属性
"no-redeclare": 2,//禁止重复声明变量
"no-regex-spaces": 2,//禁止在正则表达式字面量中使用多个空格 /foo bar/
"no-restricted-modules": 0,//如果禁用了指定模块,使用就会报错
"no-return-assign": 1,//return 语句中不能有赋值表达式
"no-script-url": 0,//禁止使用javascript:void(0)
"no-self-compare": 2,//不能比较自身
"no-sequences": 0,//禁止使用逗号运算符
"no-shadow": 2,//外部作用域中的变量不能与它所包含的作用域中的变量或参数同名
"no-shadow-restricted-names": 2,//严格模式中规定的限制标识符不能作为声明时的变量名使用
"no-spaced-func": 2,//函数调用时 函数名与()之间不能有空格
"no-sparse-arrays": 2,//禁止稀疏数组, [1,,2]
"no-sync": 0,//nodejs 禁止同步方法
"no-ternary": 0,//禁止使用三目运算符
"no-trailing-spaces": 1,//一行结束后面不要有空格
"no-this-before-super": 0,//在调用super()之前不能使用this或super
"no-throw-literal": 2,//禁止抛出字面量错误 throw "error";
"no-undef": 1,//不能有未定义的变量
"no-undef-init": 2,//变量初始化时不能直接给它赋值为undefined
"no-undefined": 2,//不能使用undefined
"no-unexpected-multiline": 2,//避免多行表达式
"no-underscore-dangle": 1,//标识符不能以_开头或结尾
"no-unneeded-ternary": 2,//禁止不必要的嵌套 var isYes = answer === 1 ? true : false;
"no-unreachable": 2,//不能有无法执行的代码
"no-unused-expressions": 2,//禁止无用的表达式
"no-unused-vars": [2, {"vars": "all", "args": "after-used"}],//不能有声明后未被使用的变量或参数
"no-use-before-define": 2,//未定义前不能使用
"no-useless-call": 2,//禁止不必要的call和apply
"no-void": 2,//禁用void操作符
"no-var": 0,//禁用var,用let和const代替
"no-warning-comments": [1, { "terms": ["todo", "fixme", "xxx"], "location": "start" }],//不能有警告备注
"no-with": 2,//禁用with
"array-bracket-spacing": [2, "never"],//是否允许非空数组里面有多余的空格
"arrow-parens": 0,//箭头函数用小括号括起来
"arrow-spacing": 0,//=>的前/后括号
"accessor-pairs": 0,//在对象中使用getter/setter
"block-scoped-var": 0,//块语句中使用var
"brace-style": [1, "1tbs"],//大括号风格
"callback-return": 1,//避免多次调用回调什么的
"camelcase": 2,//强制驼峰法命名
"comma-dangle": [2, "never"],//对象字面量项尾不能有逗号
"comma-spacing": 0,//逗号前后的空格
"comma-style": [2, "last"],//逗号风格,换行时在行首还是行尾
"complexity": [0, 11],//循环复杂度
"computed-property-spacing": [0, "never"],//是否允许计算后的键名什么的
"consistent-return": 0,//return 后面是否允许省略
"consistent-this": [2, "that"],//this别名
"constructor-super": 0,//非派生类不能调用super,派生类必须调用super
"curly": [2, "all"],//必须使用 if(){} 中的{}
"default-case": 2,//switch语句最后必须有default
"dot-location": 0,//对象访问符的位置,换行的时候在行首还是行尾
"dot-notation": [0, { "allowKeywords": true }],//避免不必要的方括号
"eol-last": 0,//文件以单一的换行符结束
"eqeqeq": 2,//必须使用全等
"func-names": 0,//函数表达式必须有名字
"func-style": [0, "declaration"],//函数风格,规定只能使用函数声明/函数表达式
"generator-star-spacing": 0,//生成器函数*的前后空格
"guard-for-in": 0,//for in循环要用if语句过滤
"handle-callback-err": 0,//nodejs 处理错误
"id-length": 0,//变量名长度
"indent": [2, 4],//缩进风格
"init-declarations": 0,//声明时必须赋初值
"key-spacing": [0, { "beforeColon": false, "afterColon": true }],//对象字面量中冒号的前后空格
"lines-around-comment": 0,//行前/行后备注
"max-depth": [0, 4],//嵌套块深度
"max-len": [0, 80, 4],//字符串最大长度
"max-nested-callbacks": [0, 2],//回调嵌套深度
"max-params": [0, 3],//函数最多只能有3个参数
"max-statements": [0, 10],//函数内最多有几个声明
"new-cap": 2,//函数名首行大写必须使用new方式调用,首行小写必须用不带new方式调用
"new-parens": 2,//new时必须加小括号
"newline-after-var": 2,//变量声明后是否需要空一行
"object-curly-spacing": [0, "never"],//大括号内是否允许不必要的空格
"object-shorthand": 0,//强制对象字面量缩写语法
"one-var": 1,//连续声明
"operator-assignment": [0, "always"],//赋值运算符 += -=什么的
"operator-linebreak": [2, "after"],//换行时运算符在行尾还是行首
"padded-blocks": 0,//块语句内行首行尾是否要空行
"prefer-const": 0,//首选const
"prefer-spread": 0,//首选展开运算
"prefer-reflect": 0,//首选Reflect的方法
"quotes": [1, "single"],//引号类型 `` "" ''
"quote-props":[2, "always"],//对象字面量中的属性名是否强制双引号
"radix": 2,//parseInt必须指定第二个参数
"id-match": 0,//命名检测
"require-yield": 0,//生成器函数必须有yield
"semi": [2, "always"],//语句强制分号结尾
"semi-spacing": [0, {"before": false, "after": true}],//分号前后空格
"sort-vars": 0,//变量声明时排序
"space-after-keywords": [0, "always"],//关键字后面是否要空一格
"space-before-blocks": [0, "always"],//不以新行开始的块{前面要不要有空格
"space-before-function-paren": [0, "always"],//函数定义时括号前面要不要有空格
"space-in-parens": [0, "never"],//小括号里面要不要有空格
"space-infix-ops": 0,//中缀操作符周围要不要有空格
"space-return-throw-case": 2,//return throw case后面要不要加空格
"space-unary-ops": [0, { "words": true, "nonwords": false }],//一元运算符的前/后要不要加空格
"spaced-comment": 0,//注释风格不要有空格什么的
"strict": 2,//使用严格模式
"use-isnan": 2,//禁止比较时使用NaN,只能用isNaN()
"valid-jsdoc": 0,//jsdoc规则
"valid-typeof": 2,//必须使用合法的typeof的值
"vars-on-top": 2,//var必须放在作用域顶部
"wrap-iife": [2, "inside"],//立即执行函数表达式的小括号风格
"wrap-regex": 0,//正则表达式字面量用小括号包起来
"yoda": [2, "never"]//禁止尤达条件
}
}
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
rules: {
// 强制"for"循环中更新子句的计算器朝着正确的方向移动
'for-direction': 0,
// 禁止function定义中出现重名参数
'no-dupe-args': 2,
// 禁止对象字面量中出现重复的key
'no-dupe-keys': 2,
// 禁止出现重复的case标签
'no-duplicate-case': 2,
// 禁止对catch子句的参数重新赋值
'no-ex-assign': 2,
// 禁止对关系运算符的左操作数使用否定操作符
'no-unsafe-negation': 2,
// 禁止出现令人困惑的多行表达式
'no-unexpected-multiline': 2,
// 禁止在return、throw、continue、break语句之后出现不可达代码
'no-unreachable': 2,
// 禁止在finally语句块中出现控制流语句
'no-unsafe-finally': 2,
// 要求使用isNaN()检查NaN
'use-isnan': 2,
// 强制typeof表达式与有效的字符串进行比较
'valid-typeof': 2,
// 还可以写表达式,厉害了~
'no-debugger': process.env.NODE_ENV === 'production' ? 'error': 'off',
'no-console': process.env.NODE_ENV === 'production' ? 'error': 'off',
/**
* 【================================================ Best Practices ================================================】
* 这些规则是关于最佳实践的,帮助你避免一些问题。
*/
// 强制 getter 和 setter在对象中成对出现
'accessor-pairs': 2,
// 强制所有控制语句使用一致的括号风格
'curly': [2, 'multi-line'],
// 强制在点号之前和之后一致的换行
'dot-location': [2, 'property'],
// 要求使用 ===和 !==
'eqeqeq': [2, 'allow-null'],
// 禁用arguments.caller 或 arguments.callee
'no-caller': 2,
// 禁止使用空解构模式
'no-empty-pattern': 2,
// 禁止eval()
'no-eval': 2,
// 禁止使用类似eval()的方法
'no-implied-eval': 2,
// 禁止扩展原生类型
'no-extend-native': 2,
// 禁止不必要的.bind()调用
'no-extra-bind': 2,
// 禁止case语句落空
'no-fallthrough': 2,
// 禁止数字字面量中使用前导和末尾小数点
'no-floating-decimal': 2,
// 禁用__iterator__属性
'no-iterator': 2,
// 禁用标签语句
'no-labels': [2, {
'allowLoop' : false,
'allowSwitch': false
}],
// 禁用不必要嵌套块
'no-lone-blocks': 2,
// 禁止使用多个空格
'no-multi-spaces': 2,
// 禁止使用多行字符串
'no-multi-str': 2,
// 禁止对String,Number 和 Boolean 使用new操作符
'no-new-wrappers': 2,
// 禁用八进制字面量
'no-octal': 2,
// 禁止在字符串中使用八进制转义序列
'no-octal-escape': 2,
// 禁止使用__proto__属性
'no-proto': 2,
// 禁止多次声明同一变量
'no-redeclare': 2,
// 禁止在return语句中使用赋值语句
'no-return-assign': [2, 'except-parens'],
// 禁止自我赋值
'no-self-assign': 2,
// 禁止自我比较
'no-self-compare': 2,
// 禁用逗号操作符
'no-sequences': 2,
// 禁止抛出异常字面量
'no-throw-literal': 2,
// 禁止一成不变的循环条件
'no-unmodified-loop-condition': 2,
// 禁止不必要的.call()和.apply()
'no-useless-call': 2,
// 禁止不必要的转义字符
'no-useless-escape': 2,
// 禁用with语句
'no-with': 2,
// 要求IIFE使用括号括起来
'wrap-iife': 2,
// 要求或禁止Yoda条件。 if("red" === color) { //字面量在前,变量在后 }
'yoda': [2, 'never'], // 比较绝不能是Yoda条件(需要变量在前,字面量在后)
/**
* 【================================================ ECMAScript 6 ================================================】
* 这些规则只与ES6有关,即通常所说的ES2015。
*/
// 强制箭头函数前后使用一致的空格
'arrow-spacing': [2, {
'before': true,
'after' : true
}],
// 要求在构造函数中有super()调用
'constructor-super': 2,
// 强制generator函数中*号周围使用一致的空格
'generator-star-spacing': [2, {
'before': true,
'after' : true
}],
// 禁止修改类声明的变量
'no-class-assign': 2,
// 禁止修改const声明的变量
'no-const-assign': 2,
// 禁止类成员中出现重复的名称
'no-dupe-class-members': 2,
// 禁止 Symbolnew 操作符和 new 一起使用
'no-new-symbol': 2,
// 禁止在构造函数中,在调用super()之前使用 this 或 super
'no-this-before-super': 2,
// 禁止在对象中使用不必要的计算属性
'no-useless-computed-key': 2,
// 禁止不必要的构造函数
'no-useless-constructor': 2,
// 禁止模板字符串中嵌入表达式周围空格的使用
'template-curly-spacing': [2, 'never'],
// 强制yield*表达式中的*周围使用空格
'yield-star-spacing': [2, 'both'],
// 要求使用const声明那些声明后不再被修改的变量
'prefer-const': 2,
/**
* 【================================================ Stylistic Issues ================================================】
* 这些规则是关于代码风格的。
*/
// // 获取当前执行环境的上下文时,强制使用一致的命名(此处强制使用 'that')。
// 'consistent-this': [2, 'that'],
// // 禁止或强制在代码块中开括号前和闭括号后有空格 { return 11 }
// 'block-spacing': [2, 'always'],
// // 强制在代码块中使用一致的大括号风格
// 'brace-style': [2, '1tbs', {
// 'allowSingleLine': true
// }],
// // 强制使用驼峰拼写法命名规定
// 'camelcase': [0, {
// 'properties': 'always'
// }],
// // 要求或禁止末尾逗号
// 'comma-dangle': [2, 'never'],
// // 强制在逗号前后使用一致的空格
// 'comma-spacing': [2, {
// 'before': false,
// 'after' : true
// }],
// // 强制在逗号前后使用一致的空格
// 'comma-style': [2, 'last'],
// // 要求或禁止文件末尾存在空行
// 'eol-last': 2,
// // 强制使用一致的缩进
// 'indent': [2, 2, {
// 'SwitchCase': 1
// }],
// // 强制在JSX属性中一致地使用双引号或单引号
// 'jsx-quotes': [2, 'prefer-single'],
// // 要求构造函数首字母大写
// 'new-cap': [2, {
// 'newIsCap': true,
// 'capIsNew': false
// }],
// // 要求构造无参构造函数时有圆括号
// 'new-parens': 2,
// // 禁用Array构造函数
// 'no-array-constructor': 2,
// // 禁止空格和tab的混合缩进
// 'no-mixed-spaces-and-tabs': 2,
// // 禁止出现多行空行
// 'no-multiple-empty-lines': [2, {
// // 最大连续空行数
// max: 2
// }],
// // 禁止在函数标识符和其调用之间有空格
// 'func-call-spacing': 2,
// // 禁止行尾空格
// 'no-trailing-spaces': 2,
// // 禁止可以在有更简单的可替代的表达式时使用三元操作符
// 'no-unneeded-ternary': [2, {
// // 允许表达式作为默认的赋值模式
// 'defaultAssignment': true
// }],
// // 禁止属性前有空白
// 'no-whitespace-before-property': 2,
// // 强制函数中的变量要么一起声明要么分开声明
// 'one-var': [2, {
// 'initialized': 'never'
// }],
// // 强制操作符使用一致的换行符
// 'operator-linebreak': [2, 'after', {
// 'overrides': {
// '?': 'before',
// ':': 'before'
// }
// }],
// // 要求或禁止块内填充
// 'padded-blocks': [2, 'never'],
// // 强烈使用一致的反勾号``、双引号""或单引号''
// 'quotes': [2, 'single', {
// // 允许字符串使用单引号或者双引号,只要字符串中包含了一个其他引号,否则需要转义
// 'avoidEscape': true,
// // 允许字符串使用反勾号
// 'allowTemplateLiterals': true
// }],
// // 禁止使用分号代替ASI(自动分号插入)
// 'semi': ["error", "always"],
// // 强制分号之前和之后使用一致的空格
// 'semi-spacing': [2, {
// 'before': false,
// 'after' : true
// }],
// // 强制在块之前使用一致的空格
// 'space-before-blocks': [2, 'always'],
// // 强制在圆括号内使用一致的空格
// 'space-in-parens': [2, 'never'],
// // 要求操作符周围有空格
// 'space-infix-ops': 2,
// // 强制在一元操作符前后使用一致的空格
// 'space-unary-ops': [2, {
// 'words' : true,
// 'nonwords': false
// }],
// // 强制在注释// 或/*使用一致的空格
// 'spaced-comment': [1, 'always', {
// 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
// }],
// // 强制在大括号中使用一致的空格
// 'object-curly-spacing': [2, 'always', {
// 'objectsInObjects': false
// }],
// // 禁止或强制在括号内使用空格
// 'array-bracket-spacing': [2, 'never'],
// // 强制要求在对象字面量的属性中键和值之间使用一致的间距
// 'key-spacing': [2, {
// 'beforeColon': false,
// 'afterColon' : true
// }],
/**
* 【================================================ Node.js and CommonJS ================================================】
* 这些规则是关于Node.js 或 在浏览器中使用CommonJS的。
*/
// 要求回调函数中有容错处理
'handle-callback-err': [2, '^(err|error)$'],
// 禁止调用 require 时使用new操作符
'no-new-require': 2,
// 禁止对__dirname和__filename进行字符串连接
'no-path-concat': 1,
// 强制在function的左括号之前使用一致的空格
'space-before-function-paren': [2, 'never'],
/**
* 【================================================ Possible Errors ================================================】
* 这些规则与JavaScript代码中可能的错误或逻辑错误有关。
*/
// 禁止条件表达式中出现赋值操作符
'no-cond-assign': 2,
// 禁止在正则表达式中使用控制字符
'no-control-regex': 0,
// 禁止在正则表达式中使用空字符集
'no-empty-character-class': 2,
// 禁止不必要的布尔转换
'no-extra-boolean-cast': 2,
// 禁止不必要的括号
'no-extra-parens': [2, 'functions'],
// 禁止对function声明重新赋值
'no-func-assign': 2,
// 禁止在嵌套块中出现变量声明或function声明
'no-inner-declarations': [2, 'functions'],
// 禁止RegExp构造函数中存在无效的正则表达式字符串
'no-invalid-regexp': 2,
// 禁止在字符串和注释之外不规则的空白
'no-irregular-whitespace': 2,
// 禁止把全局对象作为函数调用
'no-obj-calls': 2,
// 禁止正则表达式字面量中出现多个空格
'no-regex-spaces': 2,
// 禁用稀疏数组
'no-sparse-arrays': 2,
/**
* 【================================================ Variables ================================================】
* 这些规则与变量声明有关。
*/
// 禁止删除变量
'no-delete-var': 2,
// 不允许标签与变量同名
'no-label-var': 2,
// 禁止将标识符定义为受限的名字
'no-shadow-restricted-names': 2,
// 禁止未声明的变量,除非它们在/*global */注释中被提到
'no-undef': 2,
// 禁止将变量初始化为undefined
'no-undef-init': 2,
// 禁止出现未使用的变量
'no-unused-vars': [2, {
'var' : 'all',
'args': 'none'
}],
/**
* 【================================================ 配置定义在插件中的规则 ================================================】
* 格式: 插件名/规则ID
*/
//
'vue/no-parsing-error': ["off"]
}
}