JavaScript 编码规范
每个人或者每个公司都应该有一个 JavaScript 的编码规范,而且这个规范一般是不会变的, 我们可以要求每人在项目目录或者个人目录下放上 .jshintrc 或 .jscsrc 或 .eslintrc, 但你不觉得这样很麻烦吗?
此工具是基于我的个人编码习惯,同时结合了公司(沪江)里的一些规范,将 jshint,
jscs, eslint 三者组装起来的一个工具,它不需要在项目下包含任何的相关
配置文件,只要运行一下 check-style
或缩写 cs
;就会自动检查 js 文件中不符合规范的地方。
另外,也可以检查 jsx 文件的编码风格!
对于其他想利用此工具的用户:
- 如果你的编码风格和下面说的一致的话,那么恭喜你,你直接全局安装此工具,直接使用就行。
- 如果你的编码风格和下面的不一样,那么建议你
fork
此项目,修改其中的规范, 然后换个名称发布你的项目,这样你也可以使用你自己风格的此工具了。 - 如果你嫌第 2 步太麻烦了,你可以执行
check-style write
将配置文件写入你的项目目录, 手动修改写入后的配置文件即可
灵感来自于 standard,只是它强制要求你使用它的规范,没有自定义的可能,当然也不支持 jsx 文件
使用
-
先全局安装
check-style
工具npm --global install check-style -
在项目目录下运行以下命令:
自动检查项目目录下的所有 js 文件
cs# 或者使用长命令:check-style也可以检查指定的 js 文件:
cs file1 file2如果你是 jsx 文件,需要检查它的语法,可以这样用:
cs --jsx --ext jsx # 假设你的 jsx 文件是以 .jsx 为后缀命名的 -
如果想查看
.jscsrc
或.jshintrc
或.eslint
中某个字段的意思,直接运行:cs manual jscs disallowMultipleSpaces -
更多命令用
cs -h
查看
jscs 相关规范
我推荐的规范
- 在语句中不允许连续的多个 空格 或 TAB(不包括 indent)
- 逗号不要写在每行的开始位置
- 语句后面需要写
;
- 函数参数之间要使用空格
- 三元操作符之间要使用空格
- for 循环参数中的分号后需要有空格
- 定义函数时的大括号前需要使用空格
"esnext": true,"validateJSDoc": ,"disallowMultipleSpaces": true,"requireCommaBeforeLineBreak": true,// "requireSemicolons": true, // jshint 中已经有此判断了"requireSpaceBetweenArguments": true,"validateParameterSeparator": ", ","requireSpacesInConditionalExpression": true,"requireSpacesInForStatement": true,"disallowSpacesInFunctionDeclaration": ,"requireSpacesInFunction": ,// "requireYodaConditions": true,"disallowKeywords": ,"disallowKeywordsOnNewLine": ,"disallowTrailingWhitespace": true,"requireLineFeedAtFileEnd": true,"requireCurlyBraces": ,
空格
- 除括号外,所有运算符的前后都需要有空格
- 某些关键字之后需要有空格,包括
if
,else
,try
,finally
等 - block 语句块之前要有空格
- 行注释
//
后需要有空格 - 对象初始化(
{ ... }
)的每个属性名的:
后面要有空格 - 所有逗号
,
后, 但除了逗号在行尾的情况 - 单行的对象初始化(
{ ... }
),在{
后面和}
前面要有空格
"disallowSpaceBeforeBinaryOperators": ,"disallowSpaceAfterBinaryOperators": ,"requireSpaceBeforeBinaryOperators": ,"requireSpaceAfterBinaryOperators": ,"requireSpaceBeforeBlockStatements": true,"requireSpaceAfterKeywords": ,"requireSpaceBeforeKeywords": ,"requireSpaceAfterLineComment": true,"requireSpaceBeforeObjectValues": true,
对齐和缩进
- 必须采用 4 个空格,不得使用 TAB
- 未结束的语句在换行后必须多一次缩进
"validateIndentation": 4,"disallowMixedSpacesAndTabs": true,
换行
if
,do
,for
,while
等关键字前- 运算符处换行时,运算符必须在新行的行首
"requireKeywordsOnNewLine": ,"disallowOperatorBeforeLineBreak": ,"requireOperatorBeforeLineBreak": ,
命名
- 构造函数首字母大写
"requireCapitalizedConstructors": true,