阅读(148) (11)

npm 编码风格

2021-09-02 16:38:25 更新

描述

npm 的编码风格有点不合常规。它并没有因为差异而不同,而是一种精心设计的风格,旨在减少视觉混乱并使错误更加明显。

如果你想为 npm 做出贡献(这是非常受鼓励的),你应该让你的代码符合 npm 的风格。

注意: 这涉及 npm 的代码,而不是你可以从 npm 注册表下载的特定包。

线长

保持行短于 80 个字符。

一行代码内容短一些总比一长串的代码要来得好。将长列表、对象和其他语句分解为多行。

缩进

两个空格。 Tab 缩进更好,但它们在 Web 浏览器(和 GitHub 上)中看起来特别的不好,节点用 2 个空格,就是这样。 应该适当地配置你的编辑器。

大括号

大括号与需要它们的内容在同一行。 不好:

function()
{

好的:

function(){

如果块需要换到下一行,请使用花括号。如果没有,请不要使用它。 坏的:

if(foo){bar()}
while(foo)
    bar()

好的:

if(foo) bar()
while (foo){
    bar()
}

分号

除了以下的四种情况之外,就不要使用它们:

  • for(;;) 循环 它们实际上时必须的。
  • 类似while(something);的空循环 但你最好有一个为什么要这么做的理由。
  • case 'foo':doSomethin();break
  • 在领先的前([在该行的开始。这可以防止表达式分别被误解为函数调用或属性访问。

一些良好的分号用法示例:

;(x || y).doSomethin()
;[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()
}

请注意,以-and开头的行+也应该以分号为前缀,但这种情况不太常见。

逗号优先

如果有一个由逗号分隔的事物列表,并且它包含在多行中,请将逗号放在下一行的开头,直接在开始列表的标记下方。将列表中的最后一个标记单独放在一行上。例如:

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 对象。不要只是向回调返回一个字符串消息。堆栈跟踪很方便。

日志记录

日志记录是使用[npm-config]()实用程序完成的。

当日志不再有用时,请清理日志。特别是,一遍又一遍地记录同一个对象是没有帮助的。日志应该报告正在发生的事情,以便更容易地跟踪故障发生的位置。

使用适当的日志级别。查看 npm-config 并搜索 "loglevel"。

案例、命名等

使用使用lowerCamelCase时,他们指的对象,函数,方法,属性,或者在本节中未指定任何东西多字的标识符。

使用UpperCamelCase的类名(的东西,你会传递到“新”)。

使用all-lower-hyphen-css-case对多字的文件名和配置键。

使用命名函数。它们使堆栈跟踪更容易跟踪。

使用CAPS_SNAKE_CASE常量,事情应该不会改变,并且很少使用。

函数名使用单个大写字母,函数通常是匿名的,但需要递归调用自身。它清楚地表明这是一个“一次性”功能。

空、未定义、假、0

布尔变量和函数应始终为true或 false。不要将它设置为 0,除非它应该是一个数字。

当故意丢失或删除某些内容时,请将其设置为null

不要将事情设置为undefined. 保留该值以表示“尚未设置为任何内容”。

禁止使用布尔对象。