NPM-编码风格

NPM-编码风格

npm的“搞笑”编码风格

描述

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

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

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

线长

保持行短于80个字符。线条太短而不是太长会更好。将长列表,对象和其他语句分成多行。

缩进

双空格。标签更好,但它们在Web浏览器(和GitHub)中看起来像地狱,节点使用2个空格,所以就是这样。

适当配置您的编辑器。

大括号

大括号与需要它们的东西属于同一条线。

坏:

function () {

好:

function () {

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

坏:

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

好:

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

分号

除四种情况外,不要使用它们:

  • for (;;)循环。他们实际上是必需的。

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

;(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并搜索 “ loglevel ”。

案例,命名等

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

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

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

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

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

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

null,undefined,false,0

布尔变量和函数应始终为truefalse。除非它应该是一个数字,否则不要将其设置为0。

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

不要把事情搞定undefined。保留该值意味着“尚未设置为任何东西”。

禁止使用布尔对象。