npm的编码风格

描述

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()
}

分号

除了下面四种情况,不要使用分号。

  • for(;;),该循环一定是需要分号的
  • 空循环,比如while(something); (不过你得确保你一定需要这种方式) + case 'foo': doSomething(); break
  • (或者[开头,则在他们前面使用。这个可以阻止表达式解析为函数调用或者是属性访问。

一些好的分号使用例子:

;(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"

空格

除了函数调用外,在(前面加上一个空格。并且也使用一个空格来让语句更容易读。

在每行的结尾不要带有空格。不要缩进空行。不要使用更多的空格,除非是有帮助的。

函数

使用命名的函数。他们让堆栈回溯更容易读。

回调和Sync/async风格

尽可能使用异步/非阻塞的版本。它能够让npm更好地使用异步的fs(文件系统) api,不过fs、http和所有子进程都使用一样的回调传递方法。

回调函数应该总是作为列表中最后的一个参数。而回调函数的第一个参数则应该是Error或者是null。

并且不要抛出任何适应。它比不用还更糟。唯一要做的就是发送一条错误的信息给回调函数的第一个参数。

错误

总是为你的错误信息创建一个新的错误对象(Error object)。不要只是返回一个字符串的消息给回调函数。这样堆栈回调更好。

日志

可以使用npmlog工具来登记日志。

当日志不再有用的时候还请记得清除。特别的,登记同一个对象一遍又一遍是没有任何帮助的。日志应该是报告发生了什么,这种方式在错误发生的时候可以更方便的回溯。

使用正确的日志级别。可以查看npm-config来查找有关"loglevel"。

拼写,命名等等

当一个标识符指向对象,函数,方法,属性或者是其他东西的时候,使用lowerCamelCase来命名多个词的标识符。

使用UpperCamelCase来拼写类(使用new的那个)。

使用all-lower-hyphen-css-case来拼写文件名或者是配置项的主键。

使用命名的函数。他们使堆栈回调更容易理解。

使用CAPS_SNAKE_CASE来拼写常量、一些不会改变的变量和少用的变量。

使用一个大写的字母来标识那些理应是匿名但却不会递归的函数。这个可以让我们更清晰地知道它是一个用完即废的函数。

null,undefined,false,0

布尔值的变量或者是返回布尔值的函数应该总是返回true或者是false。不要使用0来返回,除非是返回一个number。

当故意清除或移除一个对象,将它设置为null。

不要将变量设置为undefined。将这个值作为“还没有设置值”的意思。

布尔值的对象是禁止的。

查看更多

  • npm-developers
  • npm


链接: https://fly63.com/course/21_1010