
8
|
第
1
章
模块化思维
用这些函数的方法,使
RequireJS
的使用变得更加复杂。
API
并不是最直观
的,因为有很多方法可以做这件事情——用依赖项来声明模块。
AngularJS
的依赖注入(
dependency injection
)系统也有许多同样的问题。
它在当时是一种优雅的解决方案,依靠巧妙的字符串解析来避免依赖数组,
并改用函数参数名来解决依赖关系。这种机制与代码压缩工具(
minifier
)
不兼容,代码压缩工具会将参数重命名为单个字符而破坏依赖注入机制。
后来,
AngularJS v1
版本引入了一个构建任务,将如下代码 :
module.factory('calculator', function(mathlib) {
// ...
})
转换为下面的格式,因为它加入了明确的依赖项列表,所以可以放心地压缩:
module.factory('calculator', ['mathlib', function(mathlib) {
// ...
}])
因为
AngularJS
引入这个鲜为人知的构建工具的时机太晚,而且它需要额
外的构建步骤来恢复不该被破坏的东西,有过度设计之嫌,而带来的好处
小到可以忽略不计,这些因素都阻碍了该模式的使用。因此,开发者大多
会坚持用他们熟悉的类似
RequireJS
那种写死依赖关系的数组格式。
1.2.3
Node.js
和
CommonJS
的出现
谈到
Node.js
衍生的若干创新,
CommonJS
模块系统算得上一个,它被简称为
CJS
。由于利用了
Node.js
程序访问文件系统的能力,因此 ...