# 代碼規(guī)范
[TOC=2,3]
## 文件路徑必須小寫
很多時(shí)候是在?`Windows`?或者?`Mac OSX`?系統(tǒng)下開發(fā)項(xiàng)目,但一般都部署?`Linux`?系統(tǒng)下。
在?`Windows`?和?`Mac`?系統(tǒng)下,文件路徑是不區(qū)分大小寫的,而?`Linux`?下是區(qū)分大小寫的。這樣很容易出現(xiàn)文件大小寫的問題導(dǎo)致開發(fā)環(huán)境下是好的,但上線后卻報(bào)錯(cuò)了。
為了避免這種情況的發(fā)生,文件路徑盡量都使用小寫字符。并且在服務(wù)啟動(dòng)時(shí),ThinkJS 會(huì)檢測(cè)項(xiàng)目下文件路徑,如果有大寫字母則會(huì)告警,如:
~~~
[2015-10-13 10:36:59] [WARNING] filepath `admin/controller/apiBase.js` has uppercases.
~~~
## 縮進(jìn)使用 2 個(gè)空格
在 Node.js 環(huán)境下開發(fā),有時(shí)候邏輯比較復(fù)雜,有各種條件判斷,或者有一些異步操作,這些都會(huì)增加代碼的縮進(jìn)。
為了不至于讓縮進(jìn)占用了太多的列寬,建議使用 2 個(gè)空格作為縮進(jìn)。
## 使用 ES6 語(yǔ)法開發(fā)
ES6 中有大量的語(yǔ)法糖可以簡(jiǎn)化我們的代碼,讓代碼更加簡(jiǎn)潔高效。 Node.js 最新版本已經(jīng)較好的支持了 ES6 的語(yǔ)法,即使有些語(yǔ)法不支持,也可以通過 Babel 編譯來支持。 所以是時(shí)候使用 ES6 語(yǔ)法來開發(fā)項(xiàng)目了。
## 不要使用 constrcutor 方法
使用 ES6 里的 class 來創(chuàng)建類的時(shí)候,可以使用?`constrcutor`?方法達(dá)到類實(shí)例化的時(shí)候自動(dòng)調(diào)用。如:
~~~
export default class think.base {
constructor(){
...
}
}
~~~
但如果不使用 ES6 里的 class,就沒有 constrcutor 方法了。
為了統(tǒng)一處理,ThinkJS 提供了?`init`?方法來代替?`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 里還沒有對(duì)這些特性進(jìn)行優(yōu)化。如:`*/yield`?等功能。
所以建議使用 Babel 來編譯,一方面可以使用 ES6 和 ES7 幾乎所有的特性,另一方面編譯后的性能也比默認(rèn)支持的要高。
## 使用 async/await 替代 */yield
`*/yield`?是 ES6 里提出一種解決異步執(zhí)行的方法,它只是一個(gè)過渡的方案,ES7 里便提出了?`async/await`?來代替它。
相對(duì)?`async/await`,`*/yield`?有以下的缺陷:
1、`*/yield`?調(diào)用后返回一個(gè)迭代器,需要借助第三方模塊來執(zhí)行。如:`co`
2、`*/yield`?無法和 Arrow Function 一起使用。
3、`*/yield`?調(diào)用另一個(gè)?`*/yield`?時(shí),需要使用?`yield *`,帶來不便。
4、目前 V8 對(duì)?`*/yield`?還沒有做優(yōu)化,最好也通過 Babel 來編譯。
所以完全可以使用 ES7 里的?`async/await`?來代替?`*/yield`,然后使用 Babel 編譯來運(yùn)行。
- 快速入門
- 介紹
- 創(chuàng)建項(xiàng)目
- 項(xiàng)目結(jié)構(gòu)
- 代碼規(guī)范
- 升級(jí)指南
- 進(jìn)階應(yīng)用
- 模塊
- 控制器
- 視圖
- 配置
- 路由
- 模型
- 介紹
- 事務(wù)
- 關(guān)聯(lián)模型
- Mysql
- MongoDB
- SQLite
- Adapter
- 介紹
- Cache
- Session
- WebSocket
- Template
- 擴(kuò)展功能
- thinkjs 命令
- 靜態(tài)資源訪問
- Middleware
- Service
- Cookie
- 錯(cuò)誤處理
- 錯(cuò)誤信息
- 數(shù)據(jù)校驗(yàn)
- 國(guó)際化
- 路徑常量
- REST API
- 定時(shí)任務(wù)
- 線上部署
- 推薦模塊
- API
- think
- think.base
- think.http.base
- http
- controller
- rest controller
- model
- model.mongo
- middleware
