代码规范
最后更新于:2022-04-01 04:33:27
# 代码规范
[TOC=2,3]
## 文件路径必须小写
很多时候是在 `Windows` 或者 `Mac OSX` 系统下开发项目,但一般都部署 `Linux` 系统下。
在 `Windows` 和 `Mac` 系统下,文件路径是不区分大小写的,而 `Linux` 下是区分大小写的。这样很容易出现文件大小写的问题导致开发环境下是好的,但上线后却报错了。
为了避免这种情况的发生,文件路径尽量都使用小写字符。并且在服务启动时,ThinkJS 会检测项目下文件路径,如果有大写字母则会告警,如:
~~~
[2015-10-13 10:36:59] [WARNING] filepath `admin/controller/apiBase.js` has uppercases.
~~~
## 缩进使用 2 个空格
在 Node.js 环境下开发,有时候逻辑比较复杂,有各种条件判断,或者有一些异步操作,这些都会增加代码的缩进。
为了不至于让缩进占用了太多的列宽,建议使用 2 个空格作为缩进。
## 使用 ES6 语法开发
ES6 中有大量的语法糖可以简化我们的代码,让代码更加简洁高效。 Node.js 最新版本已经较好的支持了 ES6 的语法,即使有些语法不支持,也可以通过 Babel 编译来支持。 所以是时候使用 ES6 语法来开发项目了。
## 不要使用 constrcutor 方法
使用 ES6 里的 class 来创建类的时候,可以使用 `constrcutor` 方法达到类实例化的时候自动调用。如:
~~~
export default class think.base {
constructor(){
...
}
}
~~~
但如果不使用 ES6 里的 class,就没有 constrcutor 方法了。
为了统一处理,ThinkJS 提供了 `init` 方法来代替 `constrcutor` 方法,该方法不管是在 class 下还是动态创建类的情况下都可以做到类实例化的时候自动被调用。
~~~
export default class think.base {
/**
* 初始化方法,类实例化时自动被调用
* @return {} []
*/
init(){
...
}
}
~~~
`注:` ThinkJS 里所有的类都会继承 `think.base` 基类。
## 使用 Babel 编译
虽然现在的 Node.js 版本已经支持了很多 ES6 的特性,但这些特性现在还只是实现了,V8 里还没有对这些特性进行优化。如:`*/yield` 等功能。
所以建议使用 Babel 来编译,一方面可以使用 ES6 和 ES7 几乎所有的特性,另一方面编译后的性能也比默认支持的要高。
## 使用 async/await 替代 */yield
`*/yield` 是 ES6 里提出一种解决异步执行的方法,它只是一个过渡的方案,ES7 里便提出了 `async/await` 来代替它。
相对 `async/await`,`*/yield` 有以下的缺陷:
1、`*/yield` 调用后返回一个迭代器,需要借助第三方模块来执行。如:`co`
2、`*/yield` 无法和 Arrow Function 一起使用。
3、`*/yield` 调用另一个 `*/yield` 时,需要使用 `yield *`,带来不便。
4、目前 V8 对 `*/yield` 还没有做优化,最好也通过 Babel 来编译。
所以完全可以使用 ES7 里的 `async/await` 来代替 `*/yield`,然后使用 Babel 编译来运行。