描述
npm的代碼格式有點(diǎn)不循常規(guī)过蹂。不是為了不同而不同的緣故聚至,而是精心設(shè)計(jì)的風(fēng)格,為了減少視覺上的混亂和bugs更明顯鸥印。
如果想要給npm貢獻(xiàn)(很鼓勵(lì)這樣)坦报,應(yīng)該讓你的代碼遵循npm's的風(fēng)格狂鞋。
注意:這意味到你從npm registry下載的npm的代碼不是特定的包
代碼長(zhǎng)度
保證一行少于80字符骚揍。短行比長(zhǎng)行更好。將長(zhǎng)lists, objects,和其他語(yǔ)句分成多行信不。
縮進(jìn)
兩個(gè)空格抽活。Tabs更好,但是在web瀏覽器和GitHub上看起來(lái)像地獄下硕,并且node使用2個(gè)空格,所以就用2個(gè)空格咯
大括號(hào)
好的方式:
// bad
function ()
{
// good
function () {
如果一塊代碼需要在下一行霜幼,使用大括號(hào)罪既。如果不需要就不要用。
// bad
if (foo) {bar()}
while (foo)
bar()
// good
if (foo) bar()
while (foo) {
bar()
}
分號(hào)
除了以下四種情況琢感,不要使用:
-
for(;;)
循環(huán)猩谊,因?yàn)槭潜仨毜?/li> - 空循環(huán)比如:
while(something);
(但是最好你有一個(gè)好理由需要什么做) - ``case 'foo': doSomething();break
- 以
(
或者[
開始的行。這可以防止表達(dá)式被解釋為一個(gè)函數(shù)調(diào)用或?qū)傩栽L問,分別地墙牌。
一些使用分好的好例子:
;(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()
}
注意以-
和+
開始的行也應(yīng)該以分號(hào)開始暗甥,但這不常見。
逗號(hào)開始
如果一些things被逗號(hào)分開虽风,并且是多行寄月,將逗號(hào)放在下一行的開始。將list的最后token作為一行厂抖。比如:
var magicWords = [ 'abracadabra'
, 'gesundheit'
, 'ventrilo' ]
, spells = { 'fireball' : function () { setOnFire() }
, 'water' : function () { putOut() } }
, a = 1
, b = 'abc'
, etc
, somethingElse
引號(hào)
使用單引號(hào)聲明字符串克懊,避免轉(zhuǎn)義
// bad
var notOk = "Just double quotes"
// good
var ok = 'String contains "double" quotes'
var alsoOk = "String contains 'single' quotes or apostrophe"
空格
除了方法調(diào)用谭溉,在所有的(
前放一個(gè)空格。同時(shí)一個(gè)空格讓代碼更可讀扮念。
不要在一行的結(jié)尾留一個(gè)空格。不要在空行縮進(jìn)场躯。不要使用太多的空格。
方法
使用命名functions伞鲫,他們讓堆棧給容易閱讀签舞。
回調(diào)儒搭,異步/同步風(fēng)格
盡可能使用異步/非阻塞的方式。對(duì)于npm使用同步fs APIs可能更有意義搂鲫,但是這樣魂仍,fs和http和子進(jìn)程這些都是用相同的回調(diào)-傳遞方法
回調(diào)應(yīng)該總是最后一個(gè)參數(shù),它的第一個(gè)參數(shù)是Error或者null
小心永遠(yuǎn)不要throw anything.它比不用更壞擦酌。將錯(cuò)誤信息作為錯(cuò)誤消息返回給回調(diào)。
Errors
總是創(chuàng)建一個(gè)新Error object返回信息睁搭。不要只是返回string message到callback.堆棧跟蹤很有用笼平。
日志
日志通過使用npmlog工具出吹。
請(qǐng)清理掉沒有用的日志辙喂。特別是,一遍又一遍的記錄相同的日志并沒有什么用秋麸。日志應(yīng)該記錄發(fā)生了什么炬太,所以更容易的跟蹤哪里發(fā)生了錯(cuò)誤。
使用合適的日志等級(jí)炒考。查看npm-config并且搜尋"loglevel"
大小寫,命名 等等
使用小駝峰命名對(duì)象斋枢、函數(shù)、方法瓤帚、屬性或者任何這里沒有說(shuō)明的描姚。
為類名使用大駝峰命名
使用全小寫用-
連接的(all-lower-hyphen-css-case)多個(gè)單詞命名文件名和config keys.
使用命名式函數(shù)。讓跟蹤堆棧更容易
使用大寫下劃線連接的方式命名常量戈次。
為匿名函數(shù)轩勘,但需要遞歸調(diào)用自己的使用一個(gè)大寫字母命名。表明它是一個(gè)"throwaway"方法
null,undefined,false,0
Boolean的變量和方法應(yīng)該總是true
或者false
.不要將它設(shè)置為0怯邪,除非期望得到一個(gè)數(shù)字绊寻。
當(dāng)故意丟失或刪除的,設(shè)置為null悬秉。
不要賦值為undefined. 預(yù)留的值以為著:“啥也沒設(shè)置”
Boolean對(duì)象是禁止的榛斯。
了解更多