npm团队的 傻叉代码风格 解读
功能
npm 推荐的编码风格
注意:这涉及 npm 的代码,而不是您可以从 npm 注册表中下载的特定软件包。
如果你没有打算给 npm 项目方提交代码,不用看的(不是 npm 发包)
除了基本的通用规则外,npm 团队自己的这个代码风格,真的不友好;
说明
npm 的编码风格有点非常规。
出于差异的考虑,它并没有什么不同,而是精心设计的样式,旨在减少视觉混乱并使错误更明显。
如果您想为 npm 做出贡献(这是非常受鼓励的),则应使您的代码符合 npm 的样式。
每行的宽度
保持少于 80 个字符的行。
太长不利于阅读;
缩进
双空格。选项卡更好,但是在 Web 浏览器(和 GitHub)上它们看起来像地狱,节点使用 2 个空格,仅此而已。
适当配置您的编辑器。
花括号
大括号与需要大括号的东西在同一行。
坏:
function ()
{
好:
function () {
如果一个块需要换行到下一行,请使用花括号。如果没有,请不要使用它。
坏:
if (foo) { bar() }
while (foo)
bar()
好:
if (fo`o) 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"
空格
(除函数调用外,在命令符前面放置一个空格。也请在使内容更易读的地方使用单个空格。
行尾不要留尾随空格。不要缩进空行。不要使用过多的空格。
功能
使用命名函数。它们使堆栈跟踪更易于阅读。
回调,同步/异步样式
尽可能使用异步/非阻塞版本的事物。对于 npm 来说,使用同步 fs API 可能更有意义,但是通过这种方式,fs 和 http 和子进程都使用相同的回调传递方法。
回调应始终是列表中的最后一个参数。它的第一个参数是 Error 或 null。
要非常小心,永远不要扔东西。比没用还糟。只需将错误消息作为第一个参数发送回回调即可。
错误
始终用您的消息创建一个新的 Error 对象。不要只将字符串消息返回到回调。堆栈跟踪很方便。
记录
记录是使用 npmlog 实用程序完成的。
当它们不再有用时,请清理它们。特别是,一遍又一遍地记录同一对象没有帮助。日志应报告正在发生的事情,以便更轻松地查找故障发生的位置。
使用适当的日志级别。查看 npm config 并搜索“日志级别”。
大小写,命名等。
lowerCamelCase 当多字标识符引用对象,函数,方法,属性或本节未指定的任何内容时,请使用它们。
使用 UpperCamelCase 的类名(的东西,你会传递到“新”)。
使用 all-lower-hyphen-css-case 对多字的文件名和配置键。
使用命名函数。它们使堆栈跟踪更容易理解。
使用 CAPS_SNAKE_CASE 常量,事情应该不会改变,并且很少使用。
对于函数名称,请使用单个大写字母,其中该函数通常是匿名的,但需要以递归方式对其进行调用。很明显,它是一个“一次性”功能。
null, undefined, false, 0
布尔变量和函数应始终为 true 或 false。除非将其设置为数字,否则请勿将其设置为 0。
如果有意丢失或删除某些东西,请将其设置为 null。
不要将事情设置为 undefined。将该值保留为“尚未设置任何内容”。
布尔对象是禁止的。