1. 安装 nodejs 和 webstorm
下载地址: https://www.jetbrains.com/webstorm/
激活码: http://idea.qinxi1992.cn/ (偷偷的用, 打枪地不要)
2. 安装 eslint 和 相关插件
npm install -g eslint
npm install -g eslint-config-standard
npm install -g eslint-plugin-html
npm install -g eslint-plugin-promise
npm install -g eslint-plugin-standard
npm install -g eslint-plugin-sort-class-members
npm install -g babel-eslint
3. 配置 webstorm
文件 - 默认设置 - 语言和框架 - Javascript - Code Quality Tools - EsLint
- 勾选
Enble
复选框 - 如果nodejs和eslint已经安装, nodejs 路径和 EsLint 模块会自动填写好, 如果没有自动填写, 自己手动选择下
- 配置文件, 选择
search for .eslintrc
, 那么将从项目根目录搜索.eslintrc
文件作为配置文件, 如果选择Configuration file
, 并填写文件路径, 那么将用该文件作为eslint的配置文件 - 点
确定
按钮保存
4. .eslintrc 配置文件
参考 http://eslint.cn/docs/rules/ 根据自己需要, 自行配置
.eslintrc.js
module.exports = {
env: {
es6: true,
mocha: true,
node: true
},
extends: ['eslint:recommended', 'plugin:sort-class-members/recommended'],
parser: 'babel-eslint',
plugins: ['babel', 'sort-class-members'],
root: true,
rules: {
'accessor-pairs': 'error', // 强制 getter 和 setter 在对象中成对出现
'array-bracket-spacing': 'off', // 强制数组方括号中使用一致的空格
'arrow-parens': 'off', // 要求箭头函数的参数使用圆括号
'arrow-spacing': 'error', // 强制箭头函数的箭头前后使用一致的空格
'babel/arrow-parens': ['error', 'as-needed'],
'babel/generator-star-spacing': ['error', 'before'],
'block-scoped-var': 'error', // 强制把变量的使用限制在其定义的作用域范围内
'block-spacing': 'off', // 强制在单行代码块中使用一致的空格
'brace-style': 'off', // 强制在代码块中使用一致的大括号风格
camelcase: 'off', // 强制使用骆驼拼写法命名约定
'comma-dangle': 'off', // 要求或禁止末尾逗号
'comma-spacing': 'off', // 强制在逗号前后使用一致的空格
'comma-style': 'off', // 强制使用一致的逗号风格
complexity: 'off', // 指定程序中允许的最大环路复杂度
'computed-property-spacing': 'error', // 强制在计算的属性的方括号中使用一致的空格
'consistent-return': 'off', // 要求 return 语句要么总是指定返回的值,要么不指定
'consistent-this': 'error', // 当获取当前执行环境的上下文时,强制使用一致的命名
'constructor-super': 'error', // 要求在构造函数中有 super() 的调用
curly: 'off', // 强制所有控制语句使用一致的括号风格
'default-case': 'error', // 要求 switch 语句中有 default 分支
'dot-location': ['error', 'property'], // 强制在点号之前和之后一致的换行
'dot-notation': 'off', // 强制在任何允许的时候使用点号
'eol-last': 'off', // 强制文件末尾至少保留一行空行
eqeqeq: ['error', 'smart'], // 要求使用 === 和 !==
'func-names': 'off', // 强制使用命名的 function 表达式
'func-style': ['error', 'declaration', { // 强制一致地使用函数声明或函数表达式
allowArrowFunctions: true
}],
'generator-star-spacing': 'off', // 强制 generator 函数中 * 号周围使用一致的空格
'id-length': ['error', { // 强制标识符的最新和最大长度
exceptions: ['_', 'e', 'i', '$ ']
}],
indent: ['error', 4, { // 强制使用一致的缩进
SwitchCase: 1
}],
'key-spacing': 'off', // 强制在对象字面量的属性中键和值之间使用一致的间距
'keyword-spacing': ['off', { // 强制在关键字前后使用一致的空格
overrides: {
case: {
after: true
},
return: {
after: true
},
throw: {
after: true
}
}
}],
'linebreak-style': 'off',
'lines-around-comment': 'off',
'max-depth': 'error', // 强制可嵌套的块的最大深度
'max-nested-callbacks': 'off',
'max-params': ['error', 4],
'new-cap': 'off',
'new-parens': 'error', // 要求调用无参构造函数时有圆括号
'newline-after-var': 'off',
'no-alert': 'error', // 禁用 alert、confirm 和 prompt
'no-array-constructor': 'error', // 禁止使用 Array 构造函数
'no-bitwise': 'error', // 禁用按位运算符
'no-caller': 'error', // 禁用 arguments.caller 或 arguments.callee
'no-catch-shadow': 'off',
'no-class-assign': 'error', // 禁止修改类声明的变量
'no-cond-assign': ['error', 'always'], // 禁止条件表达式中出现赋值操作符
'no-confusing-arrow': 'error', // 不允许箭头功能,在那里他们可以混淆的比较
"no-console": 0,
'no-const-assign': 'error', // 禁止修改 const 声明的变量
'no-constant-condition': 'error', // 禁止在条件中使用常量表达式
'no-div-regex': 'error', // 禁止除法操作符显式的出现在正则表达式开始的位置
'no-dupe-class-members': 'error', // 禁止类成员中出现重复的名称
'no-duplicate-imports': 'error', // disallow duplicate module imports
'no-else-return': 'error', // 禁止 if 语句中有 return 之后有 else
'no-empty-label': 'off',
'no-empty': 'off',
'no-eq-null': 'error', // 禁止在没有类型检查操作符的情况下与 null 进行比较
'no-eval': 'error', // 禁用 eval()
'no-extend-native': 'error', // 禁止扩展原生类型
'no-extra-bind': 'error', // 禁止不必要的 .bind() 调用
'no-extra-parens': 'error', // 禁止不必要的括号
'no-floating-decimal': 'error', // 禁止数字字面量中使用前导和末尾小数点
'no-implied-eval': 'error', // 禁止使用类似 eval() 的方法
'no-inline-comments': 'error', // 禁止在代码行后使用内联注释
'no-iterator': 'error', // 禁用 __iterator__ 属性
'no-label-var': 'off',
'no-labels': 'off',
'no-lone-blocks': 'error', // 禁用不必要的嵌套块
'no-lonely-if': 'off',
'no-loop-func': 'error', // 禁止在循环中出现 function 声明和表达式
'no-mixed-requires': 'error', // 禁止混合常规 var 声明和 require 调用
'no-mixed-spaces-and-tabs': 'off',
'no-multi-spaces': 'off',
'no-multi-str': 'off',
'no-native-reassign': 'error', // 禁止对原生对象赋值
'no-nested-ternary': 'error', // 不允许使用嵌套的三元表达式
'no-new-func': 'error', // 禁止对 Function 对象使用 new 操作符
'no-new-object': 'error', // 禁止使用 Object 的构造函数
'no-new-require': 'error', // 禁止调用 require 时使用 new 操作符
'no-new-wrappers': 'error', // 禁止对 String,Number 和 Boolean 使用 new 操作符
'no-new': 'error', // 禁止在非赋值或条件语句中使用 new 操作符
'no-octal-escape': 'error', // 禁止在字符串中使用八进制转义序列
'no-path-concat': 'error', // 禁止对 __dirname 和 __filename进行字符串连接
'no-process-env': 'error', // 禁用 process.env
'no-process-exit': 'error', // 禁用 process.exit()
'no-proto': 'error', // 禁用 __proto__ 属性
'no-restricted-modules': 'error', // 禁用指定的通过 require 加载的模块
'no-return-assign': 'error', // 禁止在 return 语句中使用赋值语句
'no-script-url': 'error', // 禁止使用 javascript: url
'no-self-compare': 'error', // 禁止自身比较
'no-sequences': 'error', // 禁用逗号操作符
'no-shadow-restricted-names': 'error', // 禁止覆盖受限制的标识符
'no-shadow': 'off',
'no-spaced-func': 'off',
'no-sync': 'off', // 禁用同步方法
'no-this-before-super': 'error', // 禁止在构造函数中,在调用 super() 之前使用 this 或 super
'no-throw-literal': 'error', // 禁止抛出非异常字面量
'no-trailing-spaces': 'error', // 禁用行尾空格
'no-undef-init': 'error', // 禁止将变量初始化为 undefined
'no-undefined': 'off',
'no-underscore-dangle': 'off',
'no-unexpected-multiline': 'error', // 禁止出现令人困惑的多行表达式
'no-unneeded-ternary': 'error', // 禁止可以在有更简单的可替代的表达式时使用三元操作符
'no-unused-expressions': 'error', // 禁止出现未使用过的表达式
"no-unused-vars": [1, { // 禁止出现未使用过的变量
"vars": "all",
"args": "after-used"
}],
'no-use-before-define': 'error', // 不允许在变量定义之前使用它们
'no-useless-call': 'error', // 禁止不必要的 .call() 和 .apply()
'no-useless-concat': 'error', // 禁止不必要的字符串字面量或模板字面量的连接
'no-var': 'off',
'no-void': 'error', // 禁用 void 操作符
'no-warning-comments': 'off',
'no-with': 'off',
'object-curly-spacing': 'off',
'object-shorthand': 'error', // 要求或禁止对象字面量中方法和属性使用简写语法
'one-var': 'off',
'operator-assignment': 'error', // 要求或禁止在可能的情况下要求使用简化的赋值操作符
'operator-linebreak': 'off',
'padded-blocks': 'off',
'prefer-arrow-callback': 'off',
'prefer-const': 'error', // 要求使用 const 声明那些声明后不再被修改的变量
'prefer-spread': 'error', // 要求使用扩展运算符而非 .apply()
'prefer-template': 'off', // 要求使用模板字面量而非字符串连接
quotes: 'off',
'quote-props': 'off',
radix: 'error', // 强制在parseInt()使用基数参数
'require-yield': 'error', // 要求generator 函数内有 yield
"semi": ["error", "never"], // 要求或禁止使用分号
'semi-spacing': 'off',
'sort-vars': 'error', // 要求同一个声明块中的变量按顺序排列
'space-before-blocks': 'off',
'space-before-function-paren': 'off',
'space-in-parens': 'off',
'space-infix-ops': 'off',
'space-unary-ops': 'off',
'spaced-comment': 'off',
'sort-imports': ['error', { // 强制模块内的 import 排序
'ignoreCase': false,
'ignoreMemberSort': false,
'memberSyntaxSortOrder': ['none', 'all', 'single', 'multiple']
}],
strict: 'off',
'valid-jsdoc': 'error', // 强制使用有效的 JSDoc 注释
'vars-on-top': 'off',
yoda: 'off',
'wrap-iife': 'off',
'wrap-regex': 'error' // 要求正则表达式被括号括起来
}
}