AIS Javascript 编码规范
Usage
1.在项目根目录下安装 eslint-config-ais:
npm install --save-dev eslint-config-ais
- ps1. 安装本包会同时安装eslint、eslint-plugin-import、eslint-plugin-react这三个依赖包。因为这三个包需要安到根目录的node_modules下,所以peerDependencies和dependencies中都写了这三个包,保证npm2和npm3都可以把他们安到根目录的node_modules下。
- ps2. 对于以前安过 eslint-config-ais 包(0.0.11之前的版本)的工程,需要先执行下面命令清一下旧的包:
npm uninstall eslint-config-ais eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react --save-dev
2.在项目根目录创建.eslintrc
文件,这是一个json格式的eslint配置文件,向其中添加"extends": "eslint-config-ais"
对ES6项目
{
"extends": "eslint-config-ais",
}
对ES5项目
{
"extends": "eslint-config-ais/es5",
}
对react项目(es6环境)
{
"extends": "eslint-config-ais/react",
}
3.配置IDE
webstrom:
在Preferences里搜索eslint,按下图配置:
EsLint package
要选当前项目目录下node_modules中的eslint。
Atom:
Atom是各IDE里对eslint支持最好的,需安装插件linter
和linter-eslint
,配色好看,报错的规则有链接,可直接点过去看,推荐使用:

配置完成后,编辑器即可实时显示eslint报错信息。
其他编辑器的配置请看官网的integrations
4.可以根据项目情况修改.eslintrc,下面是一份完整的.eslintrc文件示例:
{
"extends": "eslint-config-ais",
"parser": "babel-eslint",
"env": {
"mocha": true
},
"globals": {
"AK_GLOBAL": true
},
"rules": {
"max-len": 0
}
}
配置文件参数解释:
- parser: 使用babel-eslint解析器代替eslint默认的解析器espree,推荐在使用babel的项目中使用。
npm install babel-eslint --save-dev
- env: 说明代码的环境,不同环境下eslint会允许使用不同的全局变量,eslint-config-ais默认已开启browser,node,jquery环境
- globals: 在这里写上项目中用到全局变量,在这里设置后再代码中就不会报no-undef
- rules: 规则设置,对某条规则不满,可以在这里修改,然后告诉我补充到公共的eslint-config-ais里
更多参数说明请看官网的configuring
5.几条常用的eslint命令,可以将这3条命令写在package.json的script中:
{
...
"scripts": {
"eslint": "node_modules/.bin/eslint src/",
"eslint-output": "node_modules/.bin/eslint -f html src/ > eslint-result.html",
"eslint-fix": "node_modules/.bin/eslint --fix src/"
},
...
}
eslint src/
对src目录下的文件执行eslint,可以使用--quiet
参数只输出error不输出warn
eslint --fix src/
对src目录下的文件可修复的lint错误进行修复,可修复的属性见 这里,后面有小扳手的都是修复的属性。注意:修复缩进时可能会有问题(如空格、tab混用时),所以建议每次使用--fix
命令后diff
一下文件确认是否有问题。
eslint -f html src/ > eslint-result.html
对src目录下的文件执行eslint,并将结果格式化为html输出到当前目录的eslint-result.html
,此命令可以查看项目整体的eslint报错情况,线上也将使用此命令进行扫描
- 注意:eslint命令默认只处理后缀为
.js
的文件,其他后缀的文件需要用命令行的--ext参数指定,目前不支持在配置文件中设置扩展名,只能在命令行中使用--ext
参数指定,比如对于使用.jsx
做后缀的项目上面三条命令要变为:
eslint --ext .jsx,.js src/
eslint --fix --ext .jsx,.js src/
eslint -f html --ext .jsx,.js src/ > eslint-result.html
- 注意:由于npm install本包后会将eslint安装到工程目录,上面命令中的
eslint
需要替换成node_modules/.bin/eslint
。或者可以npm install -g eslint-config-ais
安装到全局,可直接使用eslint
命令。但是写在package.json中的还是建议写成node_modules/.bin/eslint
,因为无法保证其他人全局安装了eslint和相关的config。
其他命令行操作请看官网的command-line-interface
关于eslint更多的介绍 请看官网,报错的属性在官网搜索,即可看到详细的解释。
如果遇到接受不了的报错,可以先在.eslintrc
的rules
里修改,之后告知我补充到公共的eslint-config-ais里:》
代码规范和本包的介绍
本包以『Airbnb编码规范』 作为规范,在它的基础上了做一层自己的修改。
包的结构如下图:

rules/
的airbnb目录下是从eslint-config-airbnb(v.12.0.0)中摘出来的airbnb的规则,ais/
目录下是我们自己的规则,最后通过extends组合成es6.js, es5.js, react.js三个供引用的配置文件。
定制化部分
这里列出了不同于『Airbnb编码规范』的规则,主要是对一些规则报错级别的放松。
base
module.exports = {
rules: {
'no-param-reassign': 0,
'no-unused-expressions': [2, { allowShortCircuit: true, allowTernary: true }],
'guard-for-in': 0,
'no-floating-decimal': 1,
'no-restricted-syntax': [
2,
'DebuggerStatement',
'LabeledStatement',
'WithStatement',
],
'consistent-return': 1,
'no-else-return': 1,
'vars-on-top': 1,
eqeqeq: [1, 'allow-null'],
camelcase: [1, { properties: 'never' }],
'no-underscore-dangle': 0,
'newline-per-chained-call': 0,
'func-names': 0,
'max-len': [1, 200, 2, {
ignoreUrls: true,
ignoreComments: false
}],
'new-cap': [2, { newIsCap: true, properties: false }],
},
env: {
browser: true,
node: true,
jquery: true
}
};
es6
module.exports = {
rules: {
'prefer-template': 1,
'arrow-body-style': [1, 'as-needed'],
'global-require': 0,
'class-methods-use-this': [1, {
exceptMethods: [],
}],
'comma-dangle': [2, 'only-multiline'],
'import/no-unresolved': 0,
'import/no-amd': 0,
'import/no-extraneous-dependencies': 0,
'import/extensions': 0
}
};
react
module.exports = {
rules: {
'react/prefer-stateless-function': 1,
'react/jsx-no-bind': [1, {
ignoreRefs: true,
allowArrowFunctions: true,
allowBind: false,
}],
'react/prop-types': [1, { ignore: [], customValidators: [] }],
'class-methods-use-this': [1, {
exceptMethods: [
'render',
'getInitialState',
'getDefaultProps',
'componentWillMount',
'componentDidMount',
'componentWillReceiveProps',
'shouldComponentUpdate',
'componentWillUpdate',
'componentDidUpdate',
'componentWillUnmount',
],
}]
}
};
es5
暂无