npm 编码风格
描述
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
. 保留该值以表示“尚未设置为任何内容”。
禁止使用布尔对象。