npm的编码风格有点跟传统不太一样。当然它不是为了不同而不同,只是为了避免代码看来混乱和能够更方便地查找bug而精心设计的。
如果你想为npm贡献代码(非常欢迎你),你应该让你的代码跟本节的代码风格一致。
注意:这个只是针对于npm的代码,而不是下载的某个包。
每一行最好不要超过80个字符。更短的行比更长的行更好。将长的列表,对象,或者是其他语句拆分成多个行显示。
两个空格。使用Tab会更好,不过他们在浏览器上(和github上)看起来有点糟糕。因此node使用2个空格,也是有这方面的考虑。
可以适当配置你的编辑器(比如将Tab配置成两个空格)。
将花括号放置在使用它们的同一行。
不好的编码规格:
function xx()
{
好的编码规范:
function xx(){
如果一个块需要拆分到下一行,则使用花括号包裹,否则的话,就不要使用。
不好的编码风格:
if(foo) {bar()}
while (foo)
bar()
好的编码风格:
if(foo) bar()
while (foo) {
bar()
}
除了下面四种情况,不要使用分号。
一些好的分号使用例子:
;(x || y).doSomething()
;[a, b, c].forEach(doSomething)
for (var i = 0; i < 10; i ++) {
switch (state) {
case 'begin': start(); continue
case 'end': finish(); break
default: throw new Error('unknown state')
}
end()
}
注意:以-和+开头的行,他们的前面也需要加上分号,不过这不太常见。
如果有个列表是以逗号分隔的,并且需要多行来书写,那么就将逗号放在下一行的开头的列表开始位置之下。最后一个标志着则单独一行。例如:
var magicWords = [ 'abracadabra'
, 'gesundheit'
, 'ventrilo'
]
, spells = { 'fireball' : function () { setOnFire() }
, 'water' : function () { putOut() }
}
, a = 1
, b = 'abc'
, etc
, somethingElse
除了避免转义外,使用单引号来包裹字符串。
不好的编码风格:
var notOk = "Just double quotes"
好的编码风格:
var ok = 'String contains "double" quotes'
var alsoOk = "String contains 'single' quotes or apostrophe"
除了函数调用外,在(前面加上一个空格。并且也使用一个空格来让语句更容易读。
在每行的结尾不要带有空格。不要缩进空行。不要使用更多的空格,除非是有帮助的。
使用命名的函数。他们让堆栈回溯更容易读。
尽可能使用异步/非阻塞的版本。它能够让npm更好地使用异步的fs(文件系统) api,不过fs、http和所有子进程都使用一样的回调传递方法。
回调函数应该总是作为列表中最后的一个参数。而回调函数的第一个参数则应该是Error或者是null。
并且不要抛出任何适应。它比不用还更糟。唯一要做的就是发送一条错误的信息给回调函数的第一个参数。
总是为你的错误信息创建一个新的错误对象(Error object)。不要只是返回一个字符串的消息给回调函数。这样堆栈回调更好。
可以使用npmlog工具来登记日志。
当日志不再有用的时候还请记得清除。特别的,登记同一个对象一遍又一遍是没有任何帮助的。日志应该是报告发生了什么,这种方式在错误发生的时候可以更方便的回溯。
使用正确的日志级别。可以查看npm-config来查找有关"loglevel"。
当一个标识符指向对象,函数,方法,属性或者是其他东西的时候,使用lowerCamelCase来命名多个词的标识符。
使用UpperCamelCase来拼写类(使用new的那个)。
使用all-lower-hyphen-css-case来拼写文件名或者是配置项的主键。
使用命名的函数。他们使堆栈回调更容易理解。
使用CAPS_SNAKE_CASE来拼写常量、一些不会改变的变量和少用的变量。
使用一个大写的字母来标识那些理应是匿名但却不会递归的函数。这个可以让我们更清晰地知道它是一个用完即废的函数。
布尔值的变量或者是返回布尔值的函数应该总是返回true或者是false。不要使用0来返回,除非是返回一个number。
当故意清除或移除一个对象,将它设置为null。
不要将变量设置为undefined。将这个值作为“还没有设置值”的意思。
布尔值的对象是禁止的。