Tairraos 发表于 2020-10-25 10:55

写JS必备,ESLINT配置说明

本帖最后由 Tairraos 于 2020-10-25 15:48 编辑

帖子不长,收藏下来必然某天用得到。笔记是我自己整理并一直在使用的。有错误请反馈,谢谢。
喜欢请点击下方免费评分,谢谢
======================
还有几帖你一定会喜欢的:
Python资源大全:https://www.52pojie.cn/thread-1081229-1-1.html
Python tkinter UI指南 https://www.52pojie.cn/thread-1290751-1-1.html
原生 Javascript 实现 jQuery 的功能: https://www.52pojie.cn/thread-1084552-1-1.html
Chrome调试器Console的进阶用法 https://www.52pojie.cn/thread-1156239-1-1.html
Javascript 极限省字节(看懂混淆后的代码) https://www.52pojie.cn/thread-1056860-1-1.html
写JS必备,ESLINT配置说明 https://www.52pojie.cn/thread-1290700-1-1.html
======================


#### 生成eslint初始化配置

- `eslint --init`



#### 用eslint来修复可修复的错误 (这个超级好用,把你写的文件一下子排版得很规范,缩进,空格,逗号分号都很标准)

- `eslint 文件名 --fix`



#### 用eslint检查

- `eslint **`
- `eslint ** --fix`



#### 文件名可以用通配符

- `*.js` 表示当前目录下的文件
- `**` 表示遍历所有的目录所有的文件



#### 屏蔽eslint检查

- 不想被扫描的文件放在`.jslintignore`文件里
- 文件里可以用通配符
- 可以使用#开头的行作注释
- 可以使用!开头的行作为否定模式

```
# 屏蔽built目录下的文件,除了build/index.js
build/*
!build/index.js
```



#### 多层配置

- `.eslintrc.json`可以有多个。
- 当前目录下如果有`.eslintrc.json`,会先继承上层的`.eslintrc.json`,然后再补充当前目录的规则。冲突的地方使用当前目录配置



#### 某个文件内屏蔽eslint检查

- 禁止eslint检查只能屏幕规则,如果有JS语法问题,eslint仍然会报告

- 屏蔽整个文件的检查,把下面代码放在文件顶部

```
/* eslint-disable */
/* eslint-disable no-alert */
```

- 屏蔽文件中的部分代码检查

```
/* eslint-disable */
alert('foo');
/* eslint-enable */

/* eslint-disable no-alert, no-console */
alert('foo');
console.log('bar');
/* eslint-enable no-alert, no-console */
```

- 屏蔽本行检查

```
alert('foo'); // eslint-disable-line
alert('foo'); // eslint-disable-line no-alert
alert('foo'); // eslint-disable-line no-alert, quotes, semi
```

- 屏蔽下一行检查

```
// eslint-disable-next-line
alert('foo');
// eslint-disable-next-line no-alert
alert('foo');
// eslint-disable-next-line no-alert, quotes, semi
alert('foo');
```



#### 我的配置(每一项我都加了配置注释,未展开说明,需要详细说明可至官网查询)

```
{
"parserOptions": { //指定你想要支持的JavaScript语言选项
    "ecmaVersion": 6, //使用ECMAScript 2015版本
    "sourceType": "module", //代码符合ECMAScript模块标准
    "ecmaFeatures": { //额外的语言特性
      "globalReturn": false, //不允许在全局作用域下使用return语句
      "impliedStrict": true, //启用全局strictmode
      "jsx": true, //使用 JSX
      "experimentalObjectRestSpread": false //不支持实验性的objectrest/spread properties
    }
},

"parser": "babel-eslint", //使用babel-eslint作eslint解析器,代码里可以使用babel语法

"env": { //预定义的全局变量
    "browser": true, //browser 全局变量
    "node": true, //Node.js 全局变量和 Node.js 作用域
    "commonjs": true, //CommonJS 全局变量和CommonJS作用域(用于WebPack的代码)
    "shared-node-browser": true, //Node 和Browser通用全局变量
    "es6": true, //支持除模块外所有ECMAScript6 特性(该选项会自动设置ecmaVersion解析器选项为 6)
    "worker": true, //webworkers全局变量
    "amd": true, //定义 require() 和 define()
    "mocha": true, //添加所有的Mocha测试全局变量
    "jasmine": true, //添加所有的Jasmine版本 1.3 和 2.0 的测试全局变量
    "jest": true, //Jest 全局变量
    "phantomjs": true, //PhantomJS 全局变量
    "jquery": true //jQuery 全局变量
},

"globals": { //非预置的全局变量
    "pb": false, //能否被多次赋值?false表示只读
    "webex": false //能否被多次赋值?false表示只读
},

"extends": [ //扩展配置
    "eslint:recommended", //所有在rules里未定义到的项,使用eslint推荐值(非缺省值)
    "plugin:react/recommended" //所有在rules里未定义到的项,使用eslint推荐值(非缺省值)
],

"plugins": [
    "react" //使用React语法和语义插件: eslint-plugin-react
],

"rules": { //规则:"off" 关闭规则;"warn" 报告warn但是不会触发检查失败;"error" 发现任何一处error则代码检查不通过

    //Possible Errors 这些规则与JavaScript代码中可能的错误或逻辑错误有关:
    "no-cond-assign": "error", //[推荐]禁止条件表达式中出现赋值操作符
    "no-console": "warn", //[推荐]-提醒-不要使用console
    "no-constant-condition": "error", //[推荐]禁止在条件中使用常量表达式
    "no-control-regex": "off", //[推荐]*不*禁止在正则表达式中使用控制字符
    "no-debugger": "error", //[推荐]禁用 debugger
    "no-dupe-args": "error", //[推荐]禁止function定义中出现重名参数
    "no-dupe-keys": "error", //[推荐]禁止对象字面量中出现重复的 key
    "no-duplicate-case": "error", //[推荐]禁止出现重复的case标签
    "no-empty-character-class": "error", //[推荐]禁止在正则表达式中使用空字符集
    "no-ex-assign": "error", //[推荐]禁止对catch子句的参数重新赋值
    "no-extra-boolean-cast": "error", //[推荐]禁止不必要的布尔转换
    "no-extra-parens": "error", //[可修复]禁止不必要的括号
    "no-extra-semi": "error", //[推荐][可修复]禁止不必要的分号
    "no-func-assign": "error", //[推荐]禁止对function声明重新赋值
    "no-inner-declarations": "error", //[推荐]禁止在嵌套的块中出现变量声明或function声明
    "no-invalid-regexp": "error", //[推荐]禁止RegExp构造函数中存在无效的正则表达式字符串
    "no-irregular-whitespace": "error", //[推荐]禁止在字符串和注释之外不规则的空白
    "no-regex-spaces": "error", //[推荐][可修复]禁止正则表达式字面量中出现多个空格
    "no-unexpected-multiline": "error", //[推荐]禁止出现令人困惑的多行表达式
    "no-unreachable": "error", //[推荐]禁止在return、throw、continue 和break语句之后出现不可达代码
    "no-unsafe-finally": "error", //[推荐]禁止在finally语句块中出现控制流语句
    "use-isnan": "error", //[推荐]要求使用 isNaN() 检查 NaN
    "valid-jsdoc": "off", //*不*要使用有效的JSDoc注释
    "valid-typeof": "error", //[推荐]强制typeof表达式与有效的字符串进行比较
   
    //BestPractices这些规则是关于最佳实践的,帮助你避免一些问题:
    "accessor-pairs": "error", //强制getter和setter在对象中成对出现
    "array-callback-return": "error", //强制数组方法的回调函数中有return语句
    "block-scoped-var": "error", //强制把变量的使用限制在其定义的作用域范围内
    "complexity": ["error", 12], //指定程序中允许的最大环路复杂度
    "consistent-return": "error", //要求return语句要么总是指定返回的值,要么不指定
    "curly": "error", //[可修复]强制所有控制语句使用一致的括号风格
    "default-case": "warn", //-提醒-要求switch语句中有default分支
    "eqeqeq": "error", //要求使用 === 和 !==
    "no-alert": "error", //禁用 alert、confirm 和 prompt
    "no-caller": "error", //禁用 arguments.caller 或 arguments.callee
    "no-case-declarations": "error", //[推荐]不允许在case子句中申明变量或常量
    "no-empty-function": "warn", //-提醒-出现空函数
    "no-eq-null": "error", //禁止在没有类型检查操作符的情况下与null进行比较
    "no-eval": "error", //禁用 eval()
    "no-fallthrough": "off", //[推荐]*不*禁止case语句落空
    "no-implicit-coercion": "off", //[可修复]*不*禁止使用短符号进行类型转换
    "no-implicit-globals": "off", //*不*禁止在全局范围内使用变量声明和function声明
    "no-implied-eval": "error", //禁止使用类似 eval() 的方法
    "no-invalid-this": "error", //禁止this关键字出现在类和类对象之外
    "no-iterator": "error", //禁用__iterator__属性
    "no-loop-func": "error", //禁止在循环中出现function声明和表达式
    "no-multi-spaces": "off", //[可修复]*不*禁止使用多个空格
    "no-multi-str": "off", //*不*禁止使用多行字符串
    "no-new-func": "off", //*不*禁止对Function对象使用new操作符
    "no-new-wrappers": "off", //*不*禁止对 String,Number 和Boolean使用new操作符
    "no-new": "error", //禁止在非赋值或条件语句中使用new操作符
    "no-octal-escape": "error", //禁止在字符串中使用八进制转义序列
    "no-octal": "error", //[推荐]禁用八进制字面量
    "no-param-reassign": "off", //*不*禁止对function的参数进行重新赋值
    "no-proto": "error", //禁用__proto__属性
    "no-redeclare": "error", //[推荐]禁止多次声明同一变量
    "no-return-assign": "error", //禁止在return语句中使用赋值语句
    "no-self-assign": "error", //[推荐]禁止自我赋值leta = a;
    "no-self-compare": "error", //禁止自身比较
    "no-sequences": "error", //禁用逗号操作符
    "no-unmodified-loop-condition": "error", //检查无效的循环条件
    "no-unused-expressions": "error", //禁止出现未使用过的表达式
    "no-useless-call": "error", //禁止不必要的 .call() 和 .apply()
    "no-useless-concat": "error", //禁止不必要的字符串字面量或模板字面量的连接
    "no-useless-escape": "error", //禁用不必要的转义字符
    "no-useless-return": "error", //[可修复]禁用不必要的return
    "no-void": "off", //*不*禁用void操作符
    "no-warning-comments": "warn", //-提醒-以todo和fixme开头的注释
    "no-with": "error", //禁用with语句
    "radix": "error", //强制在parseInt()使用基数参数
    "vars-on-top": "off", //*不*要求所有的var声明出现在它们所在的作用域顶部
    "wrap-iife": "error", //[可修复]要求IIFE使用括号括起来
    "yoda": "error", //[可修复]禁止 “Yoda” 条件 ("red" === color) 需要写成 (color === "red")
   
    //Strict Mode 该规则与使用严格模式和严格模式指令有关:
    "strict": "error", //[可修复]使用严格模式指令

    //Variables 这些规则与变量声明有关
    "no-delete-var": "error", //[推荐]禁止删除变量
    "no-shadow-restricted-names": "error", //禁止使用NaN, Infinity, undefined, eval, arguments作变量名
    "no-shadow": "warn", //-提醒-变量声明与外层作用域的变量同名
    "no-undef-init": "error", //[可修复]禁止将变量初始化为undefined
    "no-undef": "error", //[推荐]禁用未声明的变量
    "no-undefined": "off", //*不*禁止使用undefined作变量名
    "no-unused-vars": "error", //[推荐]禁止定义了变量不使用
    "no-use-before-define": "error", //禁止在变量定义之前使用它们
   
    //Stylistic Issues 这些规则是关于风格指南的,而且是非常主观的
    "array-bracket-spacing": "error", //[可修复]强制数组方括号中使用一致的空格
    "block-spacing": "error", //[可修复]强制在单行代码块中使用一致的空格
    "brace-style": "error", //[可修复]强制在代码块中使用一致的大括号风格
    "camelcase": "off", //*不*强制使用骆驼拼写法命名约定
    "comma-dangle": ["error", "never"], //[可修复]要求或禁止末尾逗号
    "comma-spacing": "error", //[可修复]强制在逗号前后使用一致的空格
    "comma-style": "error", //[可修复]强制使用一致的逗号风格
    "computed-property-spacing": "error", //[可修复]强制在计算的属性的方括号中使用一致的空格
    "consistent-this": "error", //当获取当前执行环境的上下文时,强制使用一致的命名
    "eol-last": "error", //[可修复]要求或禁止文件末尾存在空行
    "func-style": "off", //*不*强制一致地使用function声明或表达式
    "indent": ["warn", 4], //[可修复]-提醒-需要以4个空格为单位缩进
    "jsx-quotes": "error", //[可修复]强制在JSX属性中一致地使用双引号或单引号
    "key-spacing": "error", //[可修复]强制在对象字面量的属性中键和值之间使用一致的间距
    "keyword-spacing": "error", //[可修复]强制在关键字前后使用一致的空格
    "linebreak-style": ["warn", "unix"], //[可修复]-提醒-使用一致的换行风格
    "lines-around-comment": "off", //[可修复]*不*要求在注释周围有空行
    "max-depth": "error", //强制可嵌套的块的最大深度
    "max-len": ["warn", 200], //-提醒-一行的最大长度
    "max-lines": ["warn", 1500], //-提醒-最大行数
    "max-nested-callbacks": "error", //强制回调函数最大嵌套深度
    "max-params": ["warn", 6], //-提醒-函数定义中最多允许的参数数量
    "max-statements-per-line": "error", //强制每一行中所允许的最大语句数量
    "max-statements": ["warn", 200], //-提醒-函数块最多允许的的语句数量
    "new-parens": "error", //[可修复]要求调用无参构造函数时有圆括号
    "newline-after-var": "off", //[可修复]*不*要求或禁止变量声明语句后有一行空行
    "newline-before-return": "off", //[可修复]*不*要求return语句之前有一空行
    "newline-per-chained-call": "off", //*不*要求方法链中每个调用都有一个换行符
    "no-array-constructor": "error", //禁用Array构造函数
    "no-bitwise": "off", //*不*禁用按位运算符
    "no-continue": "off", //*不*禁用continue语句
    "no-inline-comments": "off", //*不*禁止在代码后使用内联注释
    "no-mixed-spaces-and-tabs": "error", //[推荐]禁止空格和tab的混合缩进
    "no-multiple-empty-lines": "error", //[可修复]禁止出现多行空行
    "no-negated-condition": "error", //禁用否定的表达式
    "no-nested-ternary": "off", //*不*禁用嵌套的三元表达式
    "no-new-object": "error", //禁用Object的构造函数
    "no-plusplus": "off", //*不*禁用一元操作符 ++ 和 --
    "no-restricted-syntax": "error", //禁用特定的语法
    "no-tabs": "error", //disallowtabsin file
    "no-ternary": "off", //*不*禁用三元操作符
    "no-trailing-spaces": "off", //[可修复]*不*禁用行尾空格
    "no-underscore-dangle": "off", //*不*禁止标识符中有下划线
    "no-unneeded-ternary": "error", //禁止可以在有更简单的可替代的表达式时使用三元操作符
    "no-whitespace-before-property": "error", //[可修复]禁止属性前有空白
    "object-curly-newline": "error", //[可修复]强制大括号内换行符的一致性
    "object-curly-spacing": "error", //[可修复]强制在大括号中使用一致的空格
    "object-property-newline": "off", //*不*强制将对象的属性放在不同的行上
    "one-var": "off", //*不*强制函数中的变量要么一起声明要么分开声明
    "operator-linebreak": "off", //*不*强制操作符使用一致的换行符
    "quote-props": "off", //[可修复]*不*要求对象字面量属性名称用引号括起来
    "quotes": "error", //[可修复]强制使用一致的反引号、双引号或单引号
    "require-jsdoc": "off", //*不*要求使用JSDoc注释
    "semi": ["error", "always"], //[可修复]要求或禁止使用分号而不是 ASI
    "space-before-blocks": "error", //[可修复]强制在块之前使用一致的空格
    "space-in-parens": "error", //[可修复]强制在圆括号内使用一致的空格
    "space-infix-ops": "error", //[可修复]要求操作符周围有空格
    "space-unary-ops": "error", //[可修复]强制在一元操作符前后使用一致的空格
    "spaced-comment": "off", //[可修复]*不*强制在注释中 // 或 /* 使用一致的空格
    "wrap-regex": "off", //[可修复]*不*要求正则表达式被括号括起来
   
    //ECMAScript 6 这些规则只与ES6有关, 即通常所说的ES2015
    "arrow-body-style": "off", //[可修复]*不*要求箭头函数体使用大括号
    "arrow-parens": "error", //[可修复]要求箭头函数的参数使用圆括号
    "arrow-spacing": "error", //[可修复]强制箭头函数的箭头前后使用一致的空格
    "constructor-super": "error", //[推荐]要求在构造函数中有 super() 的调用
    "generator-star-spacing": "error", //[可修复]强制generator函数中 * 号周围使用一致的空格
    "no-class-assign": "error", //[推荐]禁止修改类声明的变量
    "no-const-assign": "error", //[推荐]禁止修改const声明的变量
    "no-dupe-class-members": "error", //[推荐]禁止类成员中出现重复的名称
    "no-this-before-super": "error", //[推荐]禁止在构造函数中,在调用 super() 之前使用this或 super
    "no-useless-computed-key": "error", //[可修复]disallowunnecessarycomputedpropertykeysinobject literals
    "no-useless-constructor": "error", //禁用不必要的构造函数
    "no-var": "off", //[可修复]*不*要求只使用let或const声明变量
    "object-shorthand": "off", //[可修复]*不*要求或禁止对象字面量中方法和属性使用简写语法
    "prefer-arrow-callback": "error", //[可修复]要求使用箭头函数作为回调
    "prefer-const": "off", //[可修复]*不*要求使用const声明那些声明后不再被修改的变量
    "prefer-spread": "error", //[可修复]要求使用扩展运算符而非 .apply()
    "prefer-template": "error", //[可修复]要求使用模板字面量而非字符串连接
    "require-yield": "error", //[推荐]要求generator函数内有 yield
    "template-curly-spacing": "error", //[可修复]要求或禁止模板字符串中的嵌入表达式周围空格的使用
    "yield-star-spacing": "error" //[可修复]强制在 yield* 表达式中 * 周围使用空格
}
}
```


======================
帖子不长,收藏下来必然某天用得到。笔记是我自己整理并一直在使用的。有错误请反馈,谢谢。
喜欢请点击下方免费评分,谢谢
======================
还有几帖你一定会喜欢的:
Python资源大全:https://www.52pojie.cn/thread-1081229-1-1.html
Python tkinter UI指南 https://www.52pojie.cn/thread-1290751-1-1.html
原生 Javascript 实现 jQuery 的功能: https://www.52pojie.cn/thread-1084552-1-1.html
Chrome调试器Console的进阶用法 https://www.52pojie.cn/thread-1156239-1-1.html
Javascript 极限省字节(看懂混淆后的代码) https://www.52pojie.cn/thread-1056860-1-1.html
写JS必备,ESLINT配置说明 https://www.52pojie.cn/thread-1290700-1-1.html
======================

Tairraos 发表于 2020-10-25 10:56

安装是 npm i eslint
如果你使用的是vscode, webstorms都支持eslint检测你的代码。

Because-of-love 发表于 2020-10-25 12:39

感谢楼主分享

深水夜藏 发表于 2020-10-25 20:12

感谢分享,学习了
页: [1]
查看完整版本: 写JS必备,ESLINT配置说明