ThinkJS 代碼規(guī)范

2021-09-17 10:22 更新

代碼規(guī)范

文件路徑必須小寫(xiě)

很多時(shí)候是在 Windows 或者 Mac OSX 系統(tǒng)下開(kāi)發(fā)項(xiàng)目,但一般都部署 Linux 系統(tǒng)下。

在 Windows 和 Mac 系統(tǒng)下,文件路徑是不區(qū)分大小寫(xiě)的,而 Linux 下是區(qū)分大小寫(xiě)的。這樣很容易出現(xiàn)文件大小寫(xiě)的問(wèn)題導(dǎo)致開(kāi)發(fā)環(huán)境下是好的,但上線后卻報(bào)錯(cuò)了。

為了避免這種情況的發(fā)生,文件路徑盡量都使用小寫(xiě)字符。并且在服務(wù)啟動(dòng)時(shí),ThinkJS 會(huì)檢測(cè)項(xiàng)目下文件路徑,如果有大寫(xiě)字母則會(huì)告警,如:

[2015-10-13 10:36:59] [WARNING] filepath `admin/controller/apiBase.js` has uppercases.

縮進(jìn)使用 2 個(gè)空格

在 Node.js 環(huán)境下開(kāi)發(fā),有時(shí)候邏輯比較復(fù)雜,有各種條件判斷,或者有一些異步操作,這些都會(huì)增加代碼的縮進(jìn)。

為了不至于讓縮進(jìn)占用了太多的列寬,建議使用 2 個(gè)空格作為縮進(jìn)。

使用 ES6 語(yǔ)法開(kāi)發(fā)

ES6 中有大量的語(yǔ)法糖可以簡(jiǎn)化我們的代碼,讓代碼更加簡(jiǎn)潔高效。 Node.js 最新版本已經(jīng)較好的支持了 ES6 的語(yǔ)法,即使有些語(yǔ)法不支持,也可以通過(guò) Babel 編譯來(lái)支持。 所以是時(shí)候使用 ES6 語(yǔ)法來(lái)開(kāi)發(fā)項(xiàng)目了。

不要使用 constrcutor 方法

使用 ES6 里的 class 來(lái)創(chuàng)建類的時(shí)候,可以使用 constrcutor 方法達(dá)到類實(shí)例化的時(shí)候自動(dòng)調(diào)用。如:

export default class think.base {
  constructor(){
    ...
  }
}

但如果不使用 ES6 里的 class,就沒(méi)有 constrcutor 方法了。

為了統(tǒng)一處理,ThinkJS 提供了 init 方法來(lái)代替 constrcutor 方法,該方法不管是在 class 下還是動(dòng)態(tài)創(chuàng)建類的情況下都可以做到類實(shí)例化的時(shí)候自動(dòng)被調(diào)用。

export default class think.base {
  /**
   * 初始化方法,類實(shí)例化時(shí)自動(dòng)被調(diào)用
   * @return {} []
   */
  init(){
    ...
  }
}

注: ThinkJS 里所有的類都會(huì)繼承 think.base 基類。

使用 Babel 編譯

雖然現(xiàn)在的 Node.js 版本已經(jīng)支持了很多 ES6 的特性,但這些特性現(xiàn)在還只是實(shí)現(xiàn)了,V8 里還沒(méi)有對(duì)這些特性進(jìn)行優(yōu)化。如:*/yield 等功能。

所以建議使用 Babel 來(lái)編譯,一方面可以使用 ES6 和 ES7 幾乎所有的特性,另一方面編譯后的性能也比默認(rèn)支持的要高。

使用 async/await 替代 */yield

*/yield 是 ES6 里提出一種解決異步執(zhí)行的方法,它只是一個(gè)過(guò)渡的方案,ES7 里便提出了 async/await 來(lái)代替它。

相對(duì) async/await*/yield 有以下的缺陷:

1、*/yield 調(diào)用后返回一個(gè)迭代器,需要借助第三方模塊來(lái)執(zhí)行。如:co

2、*/yield 無(wú)法和 Arrow Function 一起使用。

3、*/yield 調(diào)用另一個(gè) */yield 時(shí),需要使用 yield *,帶來(lái)不便。

4、目前 V8 對(duì) */yield 還沒(méi)有做優(yōu)化,最好也通過(guò) Babel 來(lái)編譯。

所以完全可以使用 ES7 里的 async/await 來(lái)代替 */yield,然后使用 Babel 編譯來(lái)運(yùn)行。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)