vs code安装使用ESLint,typescript
<hr><h1>vscode中配置步骤</h1>
<ol>
<li>vs code中安装ESLint扩展;
<div><img src="https://img2018.cnblogs.com/blog/518538/201907/518538-20190703124334391-58108138.png" alt="" width="200"></div>
</li>
<li>全局或者局部安装eslint库,因为vs code的ESLint的扩展运行需要ESlint库。vscode首先从当前打开的工作去文件夹中查找,如果找不到,则在全局环境中查找;
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">全局安装</span>
npm install eslint -<span style="color: rgba(0, 0, 0, 1)">g
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">当前项目中安装</span>
npm install eslint --save-dev</pre>
</div>
</div>
</li>
<li>安装完成之后,在vscode的file->preferences->setting中搜索eslint,会打开有关该扩展的一些设置,根据需要选择。通过ESLint扩展右下角的设置选择configure extension settings同样可以达到设置界面。<br>
<div><img src="https://img2018.cnblogs.com/blog/518538/201907/518538-20190703130610383-618408974.png" alt="" width="600"></div>
</li>
<li>完成以上三步,vscode中就已经可以完成基本的代码检查功能,如果没有进一步需求,可以不用继续向下看了。eslint的运行包含Javascript生态系统一直以来总结的检查规则,用户或者团队如果想要指定添加自己的规则,需要添加.eslintrc.js/.eslintrc.json有关于eslint的配置文件。改文件可以通过命令生成,当然也可以自己直接添加。运行命令之后会有一系列提示和选择,可以根据需要选择,也可以直接ENTER,然后在生成的文件中自己编写。<br>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">全局安装下,自动生成配置文件</span>
eslint --<span style="color: rgba(0, 0, 0, 1)">init
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">使用当前工作区安装的eslint,生成配置文件</span>
./node_modules/.bin/eslint --init</pre>
</div>
</div>
</li>
<li>添加.eslintrc.js文件到vscode中,在第三步中的settings设置中,会找到Eslint:options设置,在该参数中的设置.eslintrc.js的路径。
<div><img src="https://img2018.cnblogs.com/blog/518538/201907/518538-20190703132500996-1251803210.png" alt="" width="600"></div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"eslint.options": { "configFile": "C:/mydirectory/.eslintrc.json"<span style="color: rgba(0, 0, 0, 1)"> }
}</span></pre>
</div>
</div>
</li>
<li>最后来了解一下.eslintrc.js文件的配置,详细信息请查看官网:
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .eslintrc.js</span>
module.exports =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 指定解析器</span>
'parser': ''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 指定解析器选项</span>
'parserOptions'<span style="color: rgba(0, 0, 0, 1)">: {},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 指定脚本的运行环境</span>
'env'<span style="color: rgba(0, 0, 0, 1)">: {},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 别人可以直接使用你配置好的ESLint</span>
'root': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 脚本在执行期间访问的额外的全局变量</span>
'globals'<span style="color: rgba(0, 0, 0, 1)">: {},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 启用的规则及其各自的错误级别</span>
'rules'<span style="color: rgba(0, 0, 0, 1)">: {}
};</span></pre>
</div>
</div>
</li>
<li>借来的具体实际项目配置,虽然比较复杂,但是如果是团队开发,详细一些有利于将来的维护。今飞凯达
<div>
<div class="cnblogs_code"><img id="code_img_closed_cebba1bb-72a3-410e-aeee-d59b68706b34" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_cebba1bb-72a3-410e-aeee-d59b68706b34" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_cebba1bb-72a3-410e-aeee-d59b68706b34" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .eslintrc.js</span>
module.exports =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 解析ES6</span>
'parser': 'babel-eslint'<span style="color: rgba(0, 0, 0, 1)">,
</span>'parserOptions'<span style="color: rgba(0, 0, 0, 1)">: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 启用ES8语法支持</span>
'ecmaVersion': 2017<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> module表示ECMAScript模块</span>
'sourceType': 'module'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用额外的语言特性</span>
'ecmaFeatures'<span style="color: rgba(0, 0, 0, 1)">: {
</span>'experimentalObjectRestSpread': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'jsx': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'modules': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
}
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这些环境并不是互斥的,所以你可以同时定义多个</span>
'env'<span style="color: rgba(0, 0, 0, 1)">: {
</span>'browser': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'jquery': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'node': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'commonjs': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'es6': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
},
</span>'root': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当访问当前源文件内未定义的变量时,no-undef 规则将发出警告</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 所以需要定义这些额外的全局变量</span>
'globals'<span style="color: rgba(0, 0, 0, 1)">: {
</span>'OnlySVG': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'monitor': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'CanvasRender': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'Vue': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'VueRouter': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>'rules'<span style="color: rgba(0, 0, 0, 1)">: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置了 setter ,必须相应设置 getter ,反之不必须</span>
'accessor-pairs': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 数组方括号前后的换行符使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'array-bracket-newline': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 数组方括号前后的空格使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'array-bracket-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 数组的 map、filter、sort 等方法,回调函数必须有返回值</span>
'array-callback-return': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 每个数组项是否独占一行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'array-element-newline': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 箭头函数的书写规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'arrow-body-style': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 箭头函数的圆括号使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'arrow-parens': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 箭头函数的空格使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'arrow-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不能在块外使用块作用域内 var 定义的变量</span>
'block-scoped-var': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 代码块花括号前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'block-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> if else 的花括号换行规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'brace-style': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> callback 之后必须立即 return</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'callback-return': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 变量名必须使用驼峰式</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂不限制</span>
'camelcase': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注释的首字母应该大写</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'capitalized-comments': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> class 的非静态方法必须包含 this 关键字</span>
'class-methods-use-this': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对象的最后一项后面是否写逗号</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 此项目不关心</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @fixable 对于 PC 项目考虑兼容性时需要设置</span>
'comma-dangle': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 逗号前后是否有空格</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'comma-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 逗号写在行首还是行尾</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'comma-style': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止函数 if ... else if ... else 的复杂度超过 20</span>
'complexity': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用方括号访问对象属性时,方括号前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'computed-property-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止函数在不同条件下返回不同类型的值</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 有时候会希望通过参数获取不同类型的返回值</span>
'consistent-return': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> this 的别名规则,只允许 self 或 that</span>
'consistent-this': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 构造函数中必须调用 super</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'constructor-super': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> if 后必须包含 { ,单行 if 除外</span>
'curly': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> switch 语句必须包含 default</span>
'default-case': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 链式操作时,点的位置,是在上一行结尾还是下一行开头</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'dot-location': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文件最后必须有空行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'eol-last': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用 === 和 !== ,和 null 对比时除外</span>
'eqeqeq': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> for 循环不得因方向错误造成死循环</span>
'for-direction': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 执行函数的圆括号前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'func-call-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 把函数赋给变量或对象属性时,函数名和变量名或对象属性名必须一致</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'func-name-matching': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不允许匿名函数</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'func-names': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须只使用函数申明或只使用函数表达式</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'func-style': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> generator 的 * 前后空格使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'generator-star-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> getter 必须有返回值,允许返回 undefined</span>
'getter-return': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> require 必须在全局作用域下</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 条件加载很常见</span>
'global-require': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> for in 时需检测 hasOwnProperty</span>
'guard-for-in': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> callback 中的 err、error 参数和变量必须被处理</span>
'handle-callback-err': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> id 黑名单</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂时没有</span>
'id-blacklist': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 变量名长度限制</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 长度不是重点,清晰易读才是关键</span>
'id-length': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 限制变量名必须匹配指定的正则表达式</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制变量名</span>
'id-match': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 缩进使用 tab 还是空格</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'indent': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 变量必须在定义的时候赋值</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 先定义后赋值很常见</span>
'init-declarations': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> jsx 语法中,属性的值必须使用双引号</span>
'jsx-quotes': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对象字面量冒号前后的空格使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'key-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 关键字前后必须有空格</span>
'keyword-spacing': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 换行符使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'linebreak-style': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 单行注释必须写在前一行还是行尾</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'line-comment-position': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注释前后是否要空一行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'lines-around-comment': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 最大块嵌套深度为 5 层</span>
'max-depth': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 限制单行代码的长度</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'max-len': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 限制单个文件最大行数</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'max-lines': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 最大回调深度为 3 层</span>
'max-nested-callbacks': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 函数的形参不能多于8个</span>
'max-params': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 限制一行中的语句数量</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'max-statements-per-line': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 限制函数块中的语句数量</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'max-statements': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 三元表达式的换行规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'multiline-ternary': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> new关键字后类名应首字母大写</span>
'new-cap': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>'capIsNew': <span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许大写开头的函数直接执行</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> new 关键字后类应包含圆括号</span>
'new-parens': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 链式调用是否要换行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'newline-per-chained-call': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 alert,提醒开发者,上线时要去掉</span>
'no-alert': 1<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 Array 构造函数,使用 Array(num) 直接创建长度为 num 的数组时可以</span>
'no-array-constructor': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止将 await 写在循环里</span>
'no-await-in-loop': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止位运算</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'no-bitwise': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在 Node.js 中直接调用 Buffer 构造函数</span>
'no-buffer-constructor': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 arguments.caller 和 arguments.callee</span>
'no-caller': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> switch的条件中出现 var、let、const、function、class 等关键字,必须使用花括号把内容括起来</span>
'no-case-declarations': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> catch中不得使用已定义的变量名</span>
'no-catch-shadow': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> class定义的类名不得与其它变量重名</span>
'no-class-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止与 -0 做比较</span>
'no-compare-neg-zero': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在 if、for、while 中出现赋值语句,除非用圆括号括起来</span>
'no-cond-assign': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现难以理解的箭头函数,除非用圆括号括起来</span>
'no-confusing-arrow': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 console,提醒开发者,上线时要去掉</span>
'no-console': 1<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用常量作为判断条件</span>
'no-constant-condition': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止对 const 定义重新赋值</span>
'no-const-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 continue</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 很常用</span>
'no-continue': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止正则表达式中出现 Ctrl 键的 ASCII 表示,即/\x1f/</span>
'no-control-regex': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 debugger 语句,提醒开发者,上线时要去掉</span>
'no-debugger': 1<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止对变量使用 delete 关键字,删除对象的属性不受限制</span>
'no-delete-var': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在正则表达式中出现形似除法操作符的开头,如 let a = /=foo/</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 有代码高亮的话,在阅读这种代码时,也完全不会产生歧义或理解上的困难</span>
'no-div-regex': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 函数参数禁止重名</span>
'no-dupe-args': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止对象出现重名键值</span>
'no-dupe-keys': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 类方法禁止重名</span>
'no-dupe-class-members': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 switch 中出现相同的 case</span>
'no-duplicate-case': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止重复 import</span>
'no-duplicate-imports': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现 if (cond) { return a } else { return b },应该写为 if (cond) { return a } return b</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 有时前一种写法更清晰易懂</span>
'no-else-return': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 正则表达式中禁止出现空的字符集[]</span>
'no-empty-character-class': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止空的 function</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 包含注释的情况下允许</span>
'no-empty-function': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止解构中出现空 {} 或 []</span>
'no-empty-pattern': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现空代码块</span>
'no-empty': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 == 和 != 与 null 做比较,必须用 === 或 !==</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 非严格相等可以同时判断 null 和 undefined</span>
'no-eq-null': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 eval</span>
'no-eval': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> catch 定义的参数禁止赋值</span>
'no-ex-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止扩展原生对象</span>
'no-extend-native': }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止额外的 bind</span>
'no-extra-bind': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止额外的布尔值转换</span>
'no-extra-boolean-cast': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止额外的 label</span>
'no-extra-label': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止额外的括号,仅针对函数体</span>
'no-extra-parens': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止额外的分号</span>
'no-extra-semi': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 每一个 switch 的 case 都需要有 break, return 或 throw</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 包含注释的情况下允许</span>
'no-fallthrough': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不允许使用 2. 或 .5 来表示数字,需要用 2、2.0、0.5 的格式</span>
'no-floating-decimal': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止对函数声明重新赋值</span>
'no-func-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止对全局变量赋值</span>
'no-global-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用隐式类型转换</span>
'no-implicit-coercion': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>'allow': ['+', '!!'] <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许 + 转数值 '' + 转字符串和 !! 转布尔值</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在 setTimeout 和 setInterval 中传入字符串,因会触发隐式 eval</span>
'no-implied-eval': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止隐式定义全局变量</span>
'no-implicit-globals': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止行内注释</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 很常用</span>
'no-inline-comments': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在块作用域内使用 var 或函数声明</span>
'no-inner-declarations': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用非法的正则表达式</span>
'no-invalid-regexp': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在类之外的地方使用 this</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off this 的使用很灵活,事件回调中可以表示当前元素,函数也可以先用 this,等以后被调用的时候再 call</span>
'no-invalid-this': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用不规范空格</span>
'no-irregular-whitespace': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>'skipStrings': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许在字符串中使用</span>
'skipComments': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许在注释中使用</span>
'skipRegExps': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许在正则表达式中使用</span>
'skipTemplates': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许在模板字符串中使用</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 __iterator__</span>
'no-iterator': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> label 不得与已定义的变量重名</span>
'no-label-var': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 label</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 禁止了将很难 break 多重循环和多重 switch</span>
'no-labels': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用无效的块作用域</span>
'no-lone-blocks': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 else 中只有一个单独的 if</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 单独的 if 可以把逻辑表达的更清楚</span>
'no-lonely-if': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 for (var i) { function() { use i } },使用 let 则可以</span>
'no-loop-func': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止魔法数字</span>
'no-magic-numbers': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用混合的逻辑判断,必须把不同的逻辑用圆括号括起来</span>
'no-mixed-operators': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>"groups"<span style="color: rgba(0, 0, 0, 1)">: [
[</span>"&&", "||"<span style="color: rgba(0, 0, 0, 1)">]
]
}],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 相同类型的 require 必须放在一起</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'no-mixed-requires': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止混用空格和 tab 来做缩进,必须统一</span>
'no-mixed-spaces-and-tabs': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止连等赋值</span>
'no-multi-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用连续的空格</span>
'no-multi-spaces': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 \ 来定义多行字符串,统一使用模板字符串来做</span>
'no-multi-str': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 连续空行的数量限制</span>
'no-multiple-empty-lines': [2<span style="color: rgba(0, 0, 0, 1)">, {
max: </span>3, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文件内最多连续 3 个</span>
maxEOF: 1, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文件末尾最多连续 1 个</span>
maxBOF: 1 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文件头最多连续 1 个</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 if 中出现否定表达式 !==</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 否定的表达式可以把逻辑表达的更清楚</span>
'no-negated-condition': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止嵌套的三元表达式</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没有必要限制</span>
'no-nested-ternary': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 new Function</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 有时会用它来解析非标准格式的 JSON 数据</span>
'no-new-func': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 new Object</span>
'no-new-object': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 new require</span>
'no-new-require': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 new Symbol</span>
'no-new-symbol': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 new Boolean、Number 或 String</span>
'no-new-wrappers': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 new 一个类而不存储该实例</span>
'no-new': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止把原生对象 Math、JSON、Reflect 当函数使用</span>
'no-obj-calls': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用八进制转义符</span>
'no-octal-escape': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用0开头的数字表示八进制</span>
'no-octal': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 __dirname + 'file' 的形式拼接路径,应该使用 path.join 或 path.resolve 来代替</span>
'no-path-concat': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止对函数的参数重新赋值</span>
'no-param-reassign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 ++ 和 --</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 很常用</span>
'no-plusplus': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 process.env.NODE_ENV</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 使用很常见</span>
'no-process-env': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 process.exit(0)</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 使用很常见</span>
'no-process-exit': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 hasOwnProperty, isPrototypeOf 或 propertyIsEnumerable</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 与 guard-for-in 规则冲突,且没有必要</span>
'no-prototype-builtins': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 __proto__</span>
'no-proto': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止重复声明</span>
'no-redeclare': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在正则表达式中出现连续空格</span>
'no-regex-spaces': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止特定的全局变量</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂时没有</span>
'no-restricted-globals': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 import 特定的模块</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂时没有</span>
'no-restricted-imports': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用特定的模块</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂时没有</span>
'no-restricted-modules': 'off'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止特定的对象属性</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂时没有</span>
'no-restricted-properties': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用特定的语法</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂时没有</span>
'no-restricted-syntax': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在return中赋值</span>
'no-return-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在 return 中使用 await</span>
'no-return-await': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 location.href = 'javascript:void'</span>
'no-script-url': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止将自己赋值给自己</span>
'no-self-assign': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止自己与自己作比较</span>
'no-self-compare': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止逗号操作符</span>
'no-sequences': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用保留字作为变量名</span>
'no-shadow-restricted-names': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在嵌套作用域中出现重名的定义,如 let a; function b() { let a }</span>
'no-shadow': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止数组中出现连续逗号</span>
'no-sparse-arrays': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 node 中的同步的方法,比如 fs.readFileSync</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 使用很常见</span>
'no-sync': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 tabs</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'no-tabs': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止普通字符串中出现模板字符串语法</span>
'no-template-curly-in-string': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止三元表达式</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 很常用</span>
'no-ternary': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在构造函数的 super 之前使用 this</span>
'no-this-before-super': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 throw 字面量,必须 throw 一个 Error 对象</span>
'no-throw-literal': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止行尾空格</span>
'no-trailing-spaces': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>"skipBlankLines": <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不检查空行</span>
"ignoreComments": <span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不检查注释</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止将 undefined 赋值给变量</span>
'no-undef-init': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止访问未定义的变量或方法</span>
'no-undef': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 undefined,如需判断一个变量是否为 undefined,请使用 typeof a === 'undefined'</span>
'no-undefined': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止变量名中使用下划线</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂不限制</span>
'no-underscore-dangle': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现难以理解的多行代码</span>
'no-unexpected-multiline': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 循环体内必须对循环条件进行修改</span>
'no-unmodified-loop-condition': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止不必要的三元表达式</span>
'no-unneeded-ternary': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现不可到达的代码,如在 return、throw 之后的代码</span>
'no-unreachable': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在finally块中出现 return、throw、break、continue</span>
'no-unsafe-finally': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现不安全的否定,如 for (!key in obj} {},应该写为 for (!(key in obj)} {}</span>
'no-unsafe-negation': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止出现无用的表达式</span>
'no-unused-expressions': [2<span style="color: rgba(0, 0, 0, 1)">,
{
</span>'allowShortCircuit': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许使用 a() || b 或 a && b()</span>
'allowTernary': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许在表达式中使用三元运算符</span>
'allowTaggedTemplates': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许标记模板字符串</span>
<span style="color: rgba(0, 0, 0, 1)"> }
],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止定义不使用的 label</span>
'no-unused-labels': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止定义不使用的变量</span>
'no-unused-vars': [2<span style="color: rgba(0, 0, 0, 1)">,
{
</span>'vars': 'all', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 变量定义必须被使用</span>
'args': 'none', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对于函数形参不检测</span>
'ignoreRestSiblings': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 忽略剩余子项 fn(...args),{a, b, ...coords}</span>
'caughtErrors': 'none', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 忽略 catch 语句的参数使用</span>
<span style="color: rgba(0, 0, 0, 1)"> }
],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止在变量被定义之前使用它</span>
'no-use-before-define': [2<span style="color: rgba(0, 0, 0, 1)">,
{
</span>'functions': <span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许函数在定义之前被调用</span>
'classes': <span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许类在定义之前被引用</span>
<span style="color: rgba(0, 0, 0, 1)"> }
],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止不必要的 call 和 apply</span>
'no-useless-call': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用不必要计算的key,如 var a = { ['0']: 0 }</span>
'no-useless-computed-key': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止不必要的字符串拼接</span>
'no-useless-concat': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止无用的构造函数</span>
'no-useless-constructor': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止无用的转义</span>
'no-useless-escape': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止无效的重命名,如 import {a as a} from xxx</span>
'no-useless-rename': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止没有必要的 return</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没有必要限制</span>
'no-useless-return': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用 var,必须用 let 或 const</span>
'no-var': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止使用void</span>
'no-void': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止注释中出现 TODO 或 FIXME,用这个来提醒开发者,写了 TODO 就一定要做完</span>
'no-warning-comments': 1<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止属性前出现空格,如 foo. bar()</span>
'no-whitespace-before-property': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 with</span>
'no-with': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止 if 语句在没有花括号的情况下换行</span>
'nonblock-statement-body-position': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 定义对象的花括号前后是否要加空行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'object-curly-newline': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 定义对象的花括号前后是否要加空格</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'object-curly-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对象每个属性必须独占一行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'object-property-newline': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> obj = { a: a } 必须转换成 obj = { a }</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'object-shorthand': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 每个变量声明必须独占一行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 有 one-var 就不需要此规则了</span>
'one-var-declaration-per-line': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 是否允许使用逗号一次声明多个变量</span>
'one-var': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>'const': 'never' <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 所有 const 声明必须独占一行,不允许用逗号定义多个</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用 x = x + y 而不是 x += y</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'operator-assignment': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 断行时操作符位于行首还是行尾</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'operator-linebreak': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 代码块首尾必须要空行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'padded-blocks': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 限制语句之间的空行规则,比如变量定义完之后必须要空行</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'padding-line-between-statements': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用箭头函数作为回调</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'prefer-arrow-callback': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 声明后不再修改的变量必须使用 const</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'prefer-const': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用解构</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'prefer-destructuring': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用 0b11111011 而不是 parseInt('111110111', 2)</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'prefer-numeric-literals': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> promise 的 reject 中必须传入 Error 对象,而不允许使用字面量</span>
'prefer-promise-reject-errors': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用解构 ...args 来代替 arguments</span>
'prefer-rest-params': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用 func(...args) 来代替 func.apply(args)</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要</span>
'prefer-spread': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用模板字符串来代替字符串拼接</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'prefer-template': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 字符串必须使用单引号</span>
'quotes': [2, 'single'<span style="color: rgba(0, 0, 0, 1)">, {
</span>'avoidEscape': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许包含单引号的字符串使用双引号</span>
'allowTemplateLiterals': <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许使用模板字符串</span>
<span style="color: rgba(0, 0, 0, 1)"> }],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对象字面量的键名禁止用引号括起来</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'quote-props': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> parseInt方法必须传进制参数</span>
'radix': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> async 函数中必须存在 await 语句</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off async function 中没有 await 的写法很常见,比如 koa 的示例中就有这种用法</span>
'require-await': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须使用 jsdoc 风格的注释</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂不考虑开启</span>
'require-jsdoc': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> generator 函数内必须有 yield</span>
'require-yield': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...后面不允许有空格</span>
'rest-spread-spacing': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 分号前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'semi-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止行首出现分号</span>
'semi-style': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 行尾必须使用分号结束</span>
'semi': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> imports 必须排好序</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'sort-imports': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对象字面量的键名必须排好序</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'sort-keys': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 变量声明必须排好序</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 没必要限制</span>
'sort-vars': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> function 等的花括号之前是否使用空格</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'space-before-blocks': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> function 的圆括号之前是否使用空格</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'space-before-function-paren': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 圆括号内的空格使用规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'space-in-parens': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 操作符前后要加空格</span>
'space-infix-ops': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> new, delete, typeof, void, yield 等表达式前后必须有空格,-, +, --, ++, !, !! 等表达式前后不许有空格</span>
'space-unary-ops': [2<span style="color: rgba(0, 0, 0, 1)">, {
</span>'words': <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>'nonwords': <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
}],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注释的斜线和星号后要加空格</span>
'spaced-comment': [2, 'always'<span style="color: rgba(0, 0, 0, 1)">, {
</span>'block'<span style="color: rgba(0, 0, 0, 1)">: {
exceptions: [</span>'*'<span style="color: rgba(0, 0, 0, 1)">],
balanced: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}
}],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁用严格模式,禁止在任何地方出现 'use strict'</span>
'strict': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> switch 中冒号前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不关心</span>
'switch-colon-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 创建 Symbol 的时候必须传入描述</span>
'symbol-description': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 模板字符串 ${} 前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'template-curly-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 模板字符串前后的空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'template-tag-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 所有文件头禁止出现 BOM</span>
'unicode-bom': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止直接对 NaN 进行判断,必须使用 isNaN</span>
'use-isnan': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注释必须符合 jsdoc 的规范</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 暂不考虑开启</span>
'valid-jsdoc': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> typeof 判断条件只能是 "undefined", "object", "boolean", "number", "string", "function" 或 "symbol"</span>
'valid-typeof': 2<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> var 必须在作用域的最前面</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off var 不在最前面也是很常见的用法</span>
'vars-on-top': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自执行函数必须使用圆括号括起来,如 (function(){do something...})()</span>
'wrap-iife': ,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 正则表达式必须用圆括号括起来</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'wrap-regex': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> yield 的 * 前后空格规则</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> @off 不限制</span>
'yield-star-spacing': 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 禁止Yoda格式的判断条件,如 if (true === a),应使用 if (a === true)</span>
'yoda': 2<span style="color: rgba(0, 0, 0, 1)">,
}
};</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p>
</div>
</li>
<li>……</li>
</ol>
<h1>vscode配置补充</h1>
<p>以下是vscode的settings.json文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置eslintrc.json文件位置</span>
"eslint.options"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"configFile": "C:/mydirectory/.eslintrc.json"<span style="color: rgba(0, 0, 0, 1)">
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置eslint检查的文件类型,html非默认类型,需要手动添加 </span>
"eslint.validate": ["javascript", "javascriptreact"<span style="color: rgba(0, 0, 0, 1)">, {
</span>"language": "html"<span style="color: rgba(0, 0, 0, 1)">,
</span>"autoFix": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">eslint插件的目录</span>
"eslint.workingDirectories"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"./client", "./server"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<p>更多信息请查看官网</p>
<h1> ESLint中支持typescript</h1>
<p>有关于ESlint和TypeScript,以及TSLint的相关知识,可以去看我翻译加整理的另一篇文章。这里大致说一下应用原理,无论是Javascript还是TypeScript,都使用解析器生成AST(语法树),但是两者的AST有差异。如果要使用ESLint检查TypeScript,使用@typescript-eslint/parser解析器(实际上需要解析器和多个插件的配合),这个解析器将TypeScript转换成ESLint中可以兼容的格式。</p>
<p>@typescript-eslint/parser下面的文字说明了,设置解析器同时也需要设置parserOptions,这样才可以正确使用</p>
<p><img style="border: 1px solid rgba(0, 0, 0, 1)" src="https://img2018.cnblogs.com/blog/518538/201907/518538-20190703151618656-1504841739.png" alt="" width="650"></p>
<ol>
<li>安装@typescript-eslint/parser
<div>
<div class="cnblogs_code">
<pre>npm install @typescript-eslint/parser --save-dev</pre>
</div>
</div>
</li>
<li>在ESLint的配置文件中增加解析器配置,关于配置的详细解释,下面的parserOptions配置只是一个例子,举例说明支持哪些参数
<div>
<div class="cnblogs_code">
<div class="highlight json">
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="punctuation definition dictionary begin json">{</span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"parser<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="string quoted double json"><span class="punctuation definition string begin json">"@typescript-eslint/parser<span class="punctuation definition string end json">"<span class="punctuation separator dictionary json">,</span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"parserOptions<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="meta structure dictionary json"><span class="punctuation definition dictionary begin json">{</span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"ecmaFeatures<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="meta structure dictionary json"><span class="punctuation definition dictionary begin json">{</span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"jsx<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="constant language json">true</span></span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="punctuation definition dictionary end json">}<span class="punctuation separator dictionary json">,</span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"useJSXTextNode<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="constant language json">true<span class="punctuation separator dictionary json">,</span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"project<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="string quoted double json"><span class="punctuation definition string begin json">"./tsconfig.json<span class="punctuation definition string end json">"<span class="punctuation separator dictionary json">,</span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"tsconfigRootDir<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="string quoted double json"><span class="punctuation definition string begin json">"../../<span class="punctuation definition string end json">"<span class="punctuation separator dictionary json">,</span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="string quoted double json"><span class="punctuation definition string begin json">"extraFileExtensions<span class="punctuation definition string end json">"<span class="meta structure dictionary json"><span class="punctuation separator dictionary key-value json">: <span class="meta structure array json"><span class="punctuation definition array begin json">[<span class="string quoted double json"><span class="punctuation definition string begin json">".vue<span class="punctuation definition string end json">"<span class="punctuation definition array end json">]</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"><span class="meta structure dictionary json"> <span class="punctuation definition dictionary end json">}</span></span></span></span></span></span></div>
<div class="line"><span class="source json"><span class="meta structure dictionary json"><span class="punctuation definition dictionary end json">}</span></span></span></div>
</div>
</div>
</div>
</li>
<li>还需要使用另一个插件,它将添加或扩展具有特定于类型的特性的规则。可以选择@typescript-eslint/eslint-plugin或者@typescript-eslint/eslint-plugin-tslint;<br>
<div>这里需要注意插件和解析器所支持的TypeScript版本:</div>
<div><img style="border: 1px solid rgba(0, 0, 0, 1)" src="https://img2018.cnblogs.com/blog/518538/201907/518538-20190703162327779-1543888896.png" alt="" width="500"></div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">安装@typescript-eslint/eslint-plugin</span>
npm i @typescript-eslint/eslint-plugin --save-dev</pre>
</div>
<p>一定要保证@typescript-esling/parser和@typescript-eslint/eslint-plugin版本一致。还有<strong>如果eslint是全局安装,@typescript-eslint/eslint-plugin也必须全局安装。</strong>开发过程中,鉴于插件、库等等的版本多样,局部安装特定的版本是一个不错的选择。</p>
</div>
</li>
<li>接下来配置,官网地址
<div>首先添加解析器配置,并且添加插件:</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parser": "@typescript-eslint/parser"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugins": ["@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">]
}</span></pre>
</div>
<p>如果需要添加检查代码的规则:</p>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parser": "@typescript-eslint/parser"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugins": ["@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">],
</span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"@typescript-eslint/rule-name": "error"<span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p>如果希望使用默认推荐的规则:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"extends": ["plugin:@typescript-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">]
}</span></pre>
</div>
<p>如果eslint的代码检查也想要使用默认推荐规则:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span><strong>"eslint:recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugin:@typescript-eslint/eslint-recommended"</strong><span style="color: rgba(0, 0, 0, 1)">,
</span>"plugin:@typescript-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<p>如果希望使用类型信息的规则,需要指定tsconfig.json的地址,在parserOptions的project中指定。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parser": "@typescript-eslint/parser"<span style="color: rgba(0, 0, 0, 1)">,
</span>"parserOptions"<span style="color: rgba(0, 0, 0, 1)">: {
</span><strong>"project": "./tsconfig.json"</strong><span style="color: rgba(0, 0, 0, 1)">
},
</span>"plugins": ["@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">],
</span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"@typescript-eslint/restrict-plus-operands": "error"<span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p> </p>
</div>
</li>
<li><可选>可以结合Prettier一起使用,为了格式,有可能关闭不必要的规则或者与prettier冲突的规则,安装配置详细<br>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">安装</span>
npm install --save-dev eslint-config-<span style="color: rgba(0, 0, 0, 1)">prettier
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">配置,一下是所有支持的配置,可以根据需要选择</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"plugin:@typescript-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/babel"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/flowtype"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/react"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/standard"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/unicorn"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/vue"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">安装</span>
npm install --save-dev eslint-config-<span style="color: rgba(0, 0, 0, 1)">prettier
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">配置,一下是所有支持的配置,可以根据需要选择</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"plugin:@typescript-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/babel"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/flowtype"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/react"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/standard"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/unicorn"<span style="color: rgba(0, 0, 0, 1)">,
</span>"prettier/vue"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<p>注意:版本为<code>eslint-config-prettier@4.0.0或者更新的版本</code></p>
</div>
</li>
<li>配合Airbnb一起使用,如果不包含React,使用eslint-config-airbnb-base,否则使用eslint-config-airbnb。具体细节可以查看这里。<br>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">安装Airbnb语法负责,以及安装import,ally,react插件</span>
npm i -g eslint-config-<span style="color: rgba(0, 0, 0, 1)">airbnb
npm i </span>-g eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-<span style="color: rgba(0, 0, 0, 1)">react
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">配置文件添加配置</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span>"extends": "eslint-config-airbnb"<span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">或者只添加extends:airbnb</span></pre>
</div>
<p> </p>
</div>
</li>
<li>……</li>
</ol>
<h1>错误记录</h1>
<p>自己动手从零配置项目会出现很多错误,解决的同时可以帮助我们了解配置属性的功能。</p>
<h2><strong>vs code安装ESLint不提示错误</strong>。</h2>
<p>vs code中安装了ESLint扩展,安装了eslint,@typescript-eslint/parser以及@typescript-eslint/eslint-plugin,并且配置了.eslintrc.json文件。使用命令行eslint index.ts会显示ts文件中的错误,但是在vscode中不能够以红色下划线提示。结果在output提示中,表示ESlint和@typescript-eslint/plugin安装路径不一致。<br><img src="https://img2018.cnblogs.com/blog/518538/201907/518538-20190704110443871-1196771927.png" alt="" width="400"></p>
<div>为了方便的使用eslint,以及为了项目中能够控制版本等,全局并且局部安装了eslint。@typescript-eslint/eslint-plugin是在项目中局部安装了。结论是是这样的操作使得vscode不能够自动提示ts文件中的错误。</div>
<p>
解决:卸载全局eslint。或者全局安装@typescript-eslint/eslint-plugin。(虽然解决了,但但是对于npm包的查找和依赖产生疑问?)</p>
<h2><strong>ESlint Parsing Error : Unexpected token</strong>。</h2>
<p>解答地址。出现错误的理由主要是ESLint解析功能与javascript版本之间出现不兼容而导致的。解析方式有多种。比如在.eslitnrc.json文件中的parserOptions属性中声明ecmaVersion。</p>
<div>
<div class="cnblogs_code">
<pre> "parserOptions"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"ecmaVersion": 6<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p>还有其他方式,可以查看前面的解答地址。</p>
</div>
<h2><strong>Console is not defined.eslint报错</strong>。</h2>
<p>这个问题主要是因为运行环境的设置问题,在.eslintrc.json中设置env属性,添加browser</p>
<div>
<div class="cnblogs_code">
<pre> "env"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"node": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"browser": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p> </p>
</div>
<h2><strong>cannot-redeclare-block-scoped-variable</strong></h2>
<p><strong>.</strong>ts文件或者使用@ts-check的js文件,如果没有明显的模块标识(import,export)等等,会被认为是全局的。声明的变量与其他文件,vscode中,即使不是一个项目,也会提示该错误。解答地址与参考。</p>
<h2><strong>Parsing error: 'import' and 'export' may appear only with 'sourceType: module'</strong></h2>
<p>首先介绍一个出现这个的背景:因为使用了typescript,想要在js文件中添加typescript的类型检查规则,于是在js添加了@ts-check,这时候出现了上一个记录的问题,变量被识别为全局变量。于是为了解决这个问题,在文件中添加了<strong>export{ }</strong>语句,文件被识别为模块文件。然后又出现了这个错误。解决方式,在eslintrc文件中设置sourceType为module。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parserOptions"<span style="color: rgba(0, 0, 0, 1)">: {
</span>...<strong>"sourceType": "module"<br></strong><span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p> </p>
<h1>总结</h1>
<p> 全局安装typescript</p>
<div class="cnblogs_code">
<pre>npm install typescript -g</pre>
</div>
<p>本地安装eslint</p>
<div class="cnblogs_code">
<pre>npm install eslint --save-dev</pre>
</div>
<p>安装eslint之后,新建并配置.eslintrc.json文件。recommonded表示使用默认推荐的检查规则。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"eslint:recommended"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<p>安装@typescript-eslint/parser,自定义的解析器,用于替代ESLint默认的解析器,结合了typescript-estree,帮助eslint检查typescript代码。</p>
<div class="cnblogs_code">
<pre>npm install @typescript-eslint/parser --save-dev</pre>
</div>
<p>在eslintrc.文件中添加parser属性声明</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parser": "@typescript-eslint/parser"<span style="color: rgba(0, 0, 0, 1)">,
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"eslint:recommended"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<p>安装@typescript-eslint/eslint-plugin,帮助应用typescript的检查规则</p>
<div class="cnblogs_code">
<pre>npm i @typescript-eslint/eslint-plugin --save-dev</pre>
</div>
<p>在eslintrc.文件中添加plugins属性声明以及extends中添加plugin的两项属性值</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parser": "@typescript-eslint/parser"<span style="color: rgba(0, 0, 0, 1)">,
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"eslint:recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugin:@typescript-eslint/eslint-recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugin:@typescript-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">
],
</span>"plugins": ["@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">]
}</span></pre>
</div>
<p>最后补充其他需要的配置声明。</p>
<p>parserOptions用于指定你想要支持的 JavaScript 语言选项,比如ECMAScript的版本,文件类型等等。env包含了代码中可以使用的全局变量,例如包含了browser才可以使用console。rules是最基本的功能,可以添加或者修改检查规则。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"parser": "@typescript-eslint/parser"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugins": ["@typescript-eslint"<span style="color: rgba(0, 0, 0, 1)">],
</span>"parserOptions"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"ecmaVersion": 6<span style="color: rgba(0, 0, 0, 1)">,
</span>"sourceType": "module"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
</span>"eslint:recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugin:@typescript-eslint/eslint-recommended"<span style="color: rgba(0, 0, 0, 1)">,
</span>"plugin:@typescript-eslint/recommended"<span style="color: rgba(0, 0, 0, 1)">
],
</span>"env"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"node": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"browser": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"commonjs": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"es6": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
</span>"jquery": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
},
</span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"linebreak-style": ["error", "windows"<span style="color: rgba(0, 0, 0, 1)">]
}
}</span></pre>
</div>
<p> </p>
<h1>参考</h1>
<ol>
<li>文章中的.eslintrc.js文件来自这里,一个博主的实际工程实践</li>
<li>eslintrc.js文件详细配置——地址</li>
<li>有关ESLint的全部rules</li>
<li>typescript-eslint/esling-plugin:规则</li>
<li>typescript入门——项目配置</li>
</ol>
<p> </p><br><br>
来源:https://www.cnblogs.com/Jamie1032797633/p/11125786.html
頁:
[1]