1.extends属性
一个配置文件可以被基础配置中的已启用的规则继承。可以使用以下规则继承:
(1)'eslint:recommended'
继承Eslint中推荐的(打钩的)规则项
module.exports = {
'extends': 'eslint:recommended',
'rules': { }}
(2)使用别人写好的规则包(以eslint-config-开头的npm包),如eslint-config-standard
module.exports = {
'extends': 'standard',
'rules': { }
}
(3)使用Eslint插件中命名的配置
module.exports = {
'plugins': [
'react'
],
'extends': [
'eslint:recommended',
'plugin:react/recommended'
],
'rules': {
'no-set-state': 'off'
}
}
(4)使用'eslint:all',继承Eslint中所有的核心规则项
module.exports = {
'extends': 'eslint:all',
'rules': {
// override default options
'comma-dangle': ['error', 'always'],
'indent': ['error', 2],
'no-cond-assign': ['error', 'always'],
// disable now, but enable in the future
'one-var': 'off', // ['error', 'never'] // disable
'init-declarations': 'off',
'no-console': 'off',
'no-inline-comments': 'off',
}
}
规则列表
// 禁用 alert、confirm 和 prompt
’no-alert’:0,
// 禁用 arguments.caller 或 arguments.callee
’no-caller’:2,
// 不允许在 case 子句中使用词法声明
’no-case-declarations’:2,
// 禁止除法操作符显式的出现在正则表达式开始的位置
’no-div-regex’:2,
// 禁止 if 语句中有 return 之后有 else
’no-else-return’:0,
// 禁止出现空函数.如果一个函数包含了一条注释,它将不会被认为有问题。
’no-empty-function’:2,
// 禁止使用空解构模式no-empty-pattern
’no-empty-pattern’:2,
// 禁止在没有类型检查操作符的情况下与 null 进行比较
’no-eq-null’:1,
// 禁用 eval()
’no-eval’:2,
// 禁止扩展原生类型
’no-extend-native’:2,
// 禁止不必要的 .bind() 调用
’no-extra-bind’:2,
// 禁用不必要的标签
’no-extra-label:’:0,
// 禁止 case 语句落空
’no-fallthrough’:2,
// 禁止数字字面量中使用前导和末尾小数点
’no-floating-decimal’:2,
// 禁止使用短符号进行类型转换(!!fOO)
’no-implicit-coercion’:0,
// 禁止在全局范围内使用 var 和命名的 function 声明
’no-implicit-globals’:1,
// 禁止使用类似 eval() 的方法
’no-implied-eval’:2,
// 禁止 this 关键字出现在类和类对象之外
’no-invalid-this’:0,
// 禁用 iterator 属性
’no-iterator’:2,
// 禁用标签语句
’no-labels’:2,
// 禁用不必要的嵌套块
’no-lone-blocks’:2,
// 禁止在循环中出现 function 声明和表达式
’no-loop-func’:1,
// 禁用魔术数字(3.14什么的用常量代替)
’no-magic-numbers’:[1,{’ignore’: [0,-1,1] }],
// 禁止使用多个空格
’no-multi-spaces’:2,
// 禁止使用多行字符串,在 JavaScript 中,可以在新行之前使用斜线创建多行字符串
’no-multi-str’:2,
// 禁止对原生对象赋值
’no-native-reassign’:2,
// 禁止在非赋值或条件语句中使用 new 操作符
’no-new’:2,
// 禁止对 Function 对象使用 new 操作符
’no-new-func’:0,
// 禁止对 String,Number 和 Boolean 使用 new 操作符
’no-new-wrappers’:2,
// 禁用八进制字面量
’no-octal’:2,
// 禁止在字符串中使用八进制转义序列
’no-octal-escape’:2,
// 不允许对 function 的参数进行重新赋值
’no-param-reassign’:0,
// 禁用 proto 属性
’no-proto’:2,
// 禁止使用 var 多次声明同一变量
’no-redeclare’:2,
// 禁用指定的通过 require 加载的模块
’no-return-assign’:0,
// 禁止使用 javascript: url
’no-script-url’:0,
// 禁止自我赋值
’no-self-assign’:2,
// 禁止自身比较
’no-self-compare’:2,
// 禁用逗号操作符
’no-sequences’:2,
// 禁止抛出非异常字面量
’no-throw-literal’:2,
// 禁用一成不变的循环条件
’no-unmodified-loop-condition’:2,
// 禁止出现未使用过的表达式
’no-unused-expressions’:0,
// 禁用未使用过的标签
’no-unused-labels’:2,
// 禁止不必要的 .call() 和 .apply()
’no-useless-call’:2,
// 禁止不必要的字符串字面量或模板字面量的连接
’no-useless-concat’:2,
// 禁用不必要的转义字符
’no-useless-escape’:0,
// 禁用 void 操作符
’no-void’:0,
// 禁止在注释中使用特定的警告术语
’no-warning-comments’:0,
// 禁用 with 语句
’no-with’:2,
// 强制在parseInt()使用基数参数
’radix’:2,
// 要求所有的 var 声明出现在它们所在的作用域顶部
’vars-on-top’:0,
// 要求 IIFE 使用括号括起来
’wrap-iife’: [2,’any’],
// 要求或禁止 ’Yoda” 条件
’yoda’: [2,’never’],
// 要求或禁止使用严格模式指令
’strict’:0,
//////////////
// 变量声明 //
//////////////
// 要求或禁止 var 声明中的初始化(初值)
’init-declarations’:0,
// 不允许 catch 子句的参数与外层作用域中的变量同名
’no-catch-shadow’:0,
// 禁止删除变量
’no-delete-var’:2,
// 不允许标签与变量同名
’no-label-var’:2,
// 禁用特定的全局变量
’no-restricted-globals’:0,
// 禁止 var 声明 与外层作用域的变量同名
’no-shadow’:0,
// 禁止覆盖受限制的标识符
’no-shadow-restricted-names’:2,
// 禁用未声明的变量,除非它们在 /*global */ 注释中被提到
’no-undef’:2,
// 禁止将变量初始化为 undefined
’no-undef-init’:2,
// 禁止将 undefined 作为标识符
’no-undefined’:0,
// 禁止出现未使用过的变量
’no-unused-vars’: [2, {’vars’:’all’,’args’:’none’}],
// 不允许在变量定义之前使用它们
’no-use-before-define’:0,
//////////////////////////
// Node.js and CommonJS //
//////////////////////////
// require return statements after callbacks
’callback-return’:0,
// 要求 require() 出现在顶层模块作用域中
’global-require’:1,
// 要求回调函数中有容错处理
’handle-callback-err’: [2,’^(err|error)$’],
// 禁止混合常规 var 声明和 require 调用
’no-mixed-requires’:0,
// 禁止调用 require 时使用 new 操作符
’no-new-require’:2,
// 禁止对 __dirname 和 __filename进行字符串连接
’no-path-concat’:0,
// 禁用 process.env
’no-process-env’:0,
// 禁用 process.exit()
’no-process-exit’:0,
// 禁用同步方法
’no-sync’:0,
//////////////
// 风格指南 //
//////////////
// 指定数组的元素之间要以空格隔开(, 后面), never参数:[ 之前和 ] 之后不能带空格,always参数:[ 之前和 ] 之后必须带空格
’array-bracket-spacing’: [2,’never’],
// 禁止或强制在单行代码块中使用空格(禁用)
’block-spacing’:[1,’never’],
//强制使用一致的缩进 第二个参数为 ’tab’ 时,会使用tab,
// if while function 后面的{必须与if在同一行,java风格。
’brace-style’: [2,’1tbs’, {’allowSingleLine’:true}],
// 双峰驼命名格式
’camelcase’:2,
// 控制逗号前后的空格
’comma-spacing’: [2, {’before’:false,’after’:true}],
// 控制逗号在行尾出现还是在行首出现 (默认行尾)
// http://eslint.org/docs/rules/comma-style
’comma-style’: [2,’last’],
//’SwitchCase’ (默认:0) 强制 switch 语句中的 case 子句的缩进水平
// 以方括号取对象属性时,[ 后面和 ] 前面是否需要空格, 可选参数 never, always
’computed-property-spacing’: [2,’never’],
// 用于指统一在回调函数中指向this的变量名,箭头函数中的this已经可以指向外层调用者,应该没卵用了
// e.g [0,’that’] 指定只能 var that = this. that不能指向其他任何值,this也不能赋值给that以外的其他值
’consistent-this’: [1,’that’],
// 强制使用命名的 function 表达式
’func-names’:0,
// 文件末尾强制换行
’eol-last’:2,
’indent’: [2,4, {’SwitchCase’:1}],
// 强制在对象字面量的属性中键和值之间使用一致的间距
’key-spacing’: [2, {’beforeColon’:false,’afterColon’:true}],
// 强制使用一致的换行风格
’linebreak-style’: [1,’unix’],
// 要求在注释周围有空行 ( 要求在块级注释之前有一空行)
’lines-around-comment’: [1,{’beforeBlockComment’:true}],
// 强制一致地使用函数声明或函数表达式,方法定义风格,参数:
// 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,
// 强制回调函数最大嵌套深度 5层
’max-nested-callbacks’: [1,5],
// 禁止使用指定的标识符
’id-blacklist’:0,
// 强制标识符的最新和最大长度
’id-length’:0,
// 要求标识符匹配一个指定的正则表达式
’id-match’:0,
// 强制在 JSX 属性中一致地使用双引号或单引号
’jsx-quotes’:0,
// 强制在关键字前后使用一致的空格 (前后腰需要)
’keyword-spacing’:2,
// 强制一行的最大长度
’max-len’:[1,200],
// 强制最大行数
’max-lines’:0,
// 强制 function 定义中最多允许的参数数量
’max-params’:[1,7],
// 强制 function 块最多允许的的语句数量
’max-statements’:[1,200],
// 强制每一行中所允许的最大语句数量
’max-statements-per-line’:0,
// 要求构造函数首字母大写 (要求调用 new 操作符时有首字母大小的函数,允许调用首字母大写的函数时没有 new 操作符。)
’new-cap’: [2, {’newIsCap’:true,’capIsNew’:false}],
// 要求调用无参构造函数时有圆括号
’new-parens’:2,
// 要求或禁止 var 声明语句后有一行空行
’newline-after-var’:0,
// 禁止使用 Array 构造函数
’no-array-constructor’:2,
// 禁用按位运算符
’no-bitwise’:0,
// 要求 return 语句之前有一空行
’newline-before-return’:0,
// 要求方法链中每个调用都有一个换行符
’newline-per-chained-call’:1,
// 禁用 continue 语句
’no-continue’:0,
// 禁止在代码行后使用内联注释
’no-inline-comments’:0,
// 禁止 if 作为唯一的语句出现在 else 语句中
’no-lonely-if’:0,
// 禁止混合使用不同的操作符
’no-mixed-operators’:0,
// 不允许空格和 tab 混合缩进
’no-mixed-spaces-and-tabs’:2,
// 不允许多个空行
’no-multiple-empty-lines’: [2, {’max’:2}],
// 不允许否定的表达式
’no-negated-condition’:0,
// 不允许使用嵌套的三元表达式
’no-nested-ternary’:0,
// 禁止使用 Object 的构造函数
’no-new-object’:2,
// 禁止使用一元操作符 ++ 和 --
’no-plusplus’:0,
// 禁止使用特定的语法
’no-restricted-syntax’:0,
// 禁止 function 标识符和括号之间出现空格
’no-spaced-func’:2,
// 不允许使用三元操作符
’no-ternary’:0,
// 禁用行尾空格
’no-trailing-spaces’:2,
// 禁止标识符中有悬空下划线_bar
’no-underscore-dangle’:0,
// 禁止可以在有更简单的可替代的表达式时使用三元操作符
’no-unneeded-ternary’:2,
// 禁止属性前有空白
’no-whitespace-before-property’:0,
// 强制花括号内换行符的一致性
’object-curly-newline’:0,
// 强制在花括号中使用一致的空格
’object-curly-spacing’:0,
// 强制将对象的属性放在不同的行上
’object-property-newline’:0,
// 强制函数中的变量要么一起声明要么分开声明
’one-var’: [2, {’initialized’:’never’}],
// 要求或禁止在 var 声明周围换行
’one-var-declaration-per-line’:0,
// 要求或禁止在可能的情况下要求使用简化的赋值操作符
’operator-assignment’:0,
// 强制操作符使用一致的换行符
’operator-linebreak’: [2,’after’, {’overrides’: {’?’:’before’,’:’:’before’} }],
// 要求或禁止块内填充
’padded-blocks’:0,
// 要求对象字面量属性名称用引号括起来
’quote-props’:0,
// 强制使用一致的反勾号、双引号或单引号
’quotes’: [2,’single’,’avoid-escape’],
// 要求使用 JSDoc 注释
’require-jsdoc’:1,
// 要求或禁止使用分号而不是 ASI(这个才是控制行尾部分号的,)
’semi’: [2,’always’],
// 强制分号之前和之后使用一致的空格
’semi-spacing’:0,
// 要求同一个声明块中的变量按顺序排列
’sort-vars’:0,
// 强制在块之前使用一致的空格
’space-before-blocks’: [2,’always’],
// 强制在 function的左括号之前使用一致的空格
’space-before-function-paren’: [2,’always’],
// 强制在圆括号内使用一致的空格
’space-in-parens’: [2,’never’],
// 要求操作符周围有空格
’space-infix-ops’:2,
// 强制在一元操作符前后使用一致的空格
’space-unary-ops’: [2, {’words’:true,’nonwords’:false}],
// 强制在注释中 // 或 /* 使用一致的空格
’spaced-comment’: [2,’always’, {’markers’: [’global’,’globals’,’eslint’,’eslint-disable’,’*package’,’!’] }],
// 要求或禁止 Unicode BOM
’unicode-bom’:0,
// 要求正则表达式被括号括起来
’wrap-regex’:0,
//////////////
// ES6.相关 //
//////////////
// 要求箭头函数体使用大括号
’arrow-body-style’:2,
// 要求箭头函数的参数使用圆括号
’arrow-parens’:2,
’arrow-spacing’:[2,{’before’:true,’after’:true}],
// 强制在子类构造函数中用super()调用父类构造函数,TypeScrip的编译器也会提示
’constructor-super’:0,
// 强制 generator 函数中 * 号周围使用一致的空格
’generator-star-spacing’: [2, {’before’:true,’after’:true}],
// 禁止修改类声明的变量
’no-class-assign’:2,
// 不允许箭头功能,在那里他们可以混淆的比较
’no-confusing-arrow’:0,
// 禁止修改 const 声明的变量
’no-const-assign’:2,
// 禁止类成员中出现重复的名称
’no-dupe-class-members’:2,
// 不允许复制模块的进口
’no-duplicate-imports’:0,
// 禁止 Symbol 的构造函数
’no-new-symbol’:2,
// 允许指定模块加载时的进口
’no-restricted-imports’:0,
// 禁止在构造函数中,在调用 super() 之前使用 this 或 super
’no-this-before-super’:2,
// 禁止不必要的计算性能键对象的文字
’no-useless-computed-key’:0,
// 要求使用 let 或 const 而不是 var
’no-var’:0,
// 要求或禁止对象字面量中方法和属性使用简写语法
’object-shorthand’:0,
// 要求使用箭头函数作为回调
’prefer-arrow-callback’:0,
// 要求使用 const 声明那些声明后不再被修改的变量
’prefer-const’:0,
// 要求在合适的地方使用 Reflect 方法
’prefer-reflect’:0,
// 要求使用扩展运算符而非 .apply()
’prefer-spread’:0,
// 要求使用模板字面量而非字符串连接
’prefer-template’:0,
// Suggest using the rest parameters instead of arguments
’prefer-rest-params’:0,
// 要求generator 函数内有 yield
’require-yield’:0,
// enforce spacing between rest and spread operators and their expressions
’rest-spread-spacing’:0,
// 强制模块内的 import 排序
’sort-imports’:0,
// 要求或禁止模板字符串中的嵌入表达式周围空格的使用
’template-curly-spacing’:1,
// 强制在 yield* 表达式中 * 周围使用空格
’yield-star-spacing’:2
}
}
extends属性
一个配置文件可以被基础配置中的已启用的规则继承。可以使用以下规则继承:
(1)’eslint:recommended’
继承Eslint中推荐的(打钩的)规则项
module.exports = {
’extends’: ’eslint:recommended’,
’rules’: {
}
}
(2)使用别人写好的规则包(以eslint-config-开头的npm包),如eslint-config-standard
module.exports = {
’extends’: ’standard’,
’rules’: {
}
}
(3)使用Eslint插件中命名的配置
module.exports = {
’plugins’: [
’react’
],
’extends’: [
’eslint:recommended’,
’plugin:react/recommended’
],
’rules’: {
’no-set-state’: ’off’
}
}
(4)使用’eslint:all’,继承Eslint中所有的核心规则项
module.exports = {
’extends’: ’eslint:all’,
’rules’: {
// override default options
’comma-dangle’: [’error’, ’always’],
’indent’: [’error’, 2],
’no-cond-assign’: [’error’, ’always’],
// disable now, but enable in the future
’one-var’: ’off’, // [’error’, ’never’]
// disable
’init-declarations’: ’off’,
’no-console’: ’off’,
’no-inline-comments’: ’off’,
}
}
/* for vue */
// 禁止重复的二级键名
// @off 没必要限制
'vue/no-dupe-keys': 'off',
// 禁止出现语法错误
'vue/no-parsing-error': 'error',
// 禁止覆盖保留字
'vue/no-reservered-keys': 'error',
// 组件的 data 属性的值必须是一个函数
// @off 没必要限制
'vue/no-shared-component-data': 'off',
// 禁止 <template> 使用 key 属性
// @off 太严格了
'vue/no-template-key': 'off',
// render 函数必须有返回值
'vue/require-render-return': 'error',
// prop 的默认值必须匹配它的类型
// @off 太严格了
'vue/require-valid-default-prop': 'off',
// 计算属性必须有返回值
'vue/return-in-computed-property': 'error',
// template 的根节点必须合法
'vue/valid-template-root': 'error',
// v-bind 指令必须合法
'vue/valid-v-bind': 'error',
// v-cloak 指令必须合法
'vue/valid-v-cloak': 'error',
// v-else-if 指令必须合法
'vue/valid-v-else-if': 'error',
// v-else 指令必须合法
'vue/valid-v-else': 'error',
// v-for 指令必须合法
'vue/valid-v-for': 'error',
// v-html 指令必须合法
'vue/valid-v-html': 'error',
// v-if 指令必须合法
'vue/valid-v-if': 'error',
// v-model 指令必须合法
'vue/valid-v-model': 'error',
// v-on 指令必须合法
'vue/valid-v-on': 'error',
// v-once 指令必须合法
'vue/valid-v-once': 'error',
// v-pre 指令必须合法
'vue/valid-v-pre': 'error',
// v-show 指令必须合法
'vue/valid-v-show': 'error',
// v-text 指令必须合法
'vue/valid-v-text': 'error', //
// 最佳实践 //
// @fixable html 的结束标签必须符合规定
// @off 有的标签不必严格符合规定,如 <br> 或 <br/> 都应该是合法的
'vue/html-end-tags': 'off',
// 计算属性禁止包含异步方法
'vue/no-async-in-computed-properties': 'error',
// 禁止出现难以理解的 v-if 和 v-for
'vue/no-confusing-v-for-v-if': 'error',
// 禁止出现重复的属性
'vue/no-duplicate-attributes': 'error',
// 禁止在计算属性中对属性修改
// @off 太严格了
'vue/no-side-effects-in-computed-properties': 'off',
// 禁止在 <textarea> 中出现 {{message}}
'vue/no-textarea-mustache': 'error',
// 组件的属性必须为一定的顺序
'vue/order-in-components': 'error',
// <component> 必须有 v-bind:is
'vue/require-component-is': 'error',
// prop 必须有类型限制
// @off 没必要限制
'vue/require-prop-types': 'off',
// v-for 指令的元素必须有 v-bind:key
'vue/require-v-for-key': 'error', //
// 风格问题 //
// @fixable 限制自定义组件的属性风格 // @off 没必要限制
'vue/attribute-hyphenation': 'off',
// html 属性值必须用双引号括起来
'vue/html-quotes': 'error',
// @fixable 没有内容时,组件必须自闭和 // @off 没必要限制
'vue/html-self-closing': 'off',
// 限制每行允许的最多属性数量 // @off 没必要限制
'vue/max-attributes-per-line': 'off',
// @fixable 限制组件的 name 属性的值的风格 // @off 没必要限制
'vue/name-property-casing': 'off',
// @fixable 禁止出现连续空格 // TODO: 李德广 触发 新版本 typeerror:get 'range' of undefined
// 'vue/no-multi-spaces': 'error',
// @fixable 限制 v-bind 的风格 // @off 没必要限制
'vue/v-bind-style': 'off',
// @fixable 限制 v-on 的风格 // @off 没必要限制
'vue/v-on-style': 'off',
// 定义了的 jsx element 必须使用
'vue/jsx-uses-vars': 'error'