#javascript Require.js 与 CommonJS / AMD 模块以及 #angularjs
#javascript Require.js 与 CommonJS / AMD 模块以及 #angularjs
我最近回复了关于require.js 与 browserify 的一则 Twitter 讨论。
@cowboy 我正在使用 AMD 在服务器和客户端之间创建可重用的代码,并且我很喜欢它。我的主要问题是与 angular 等集成。
— Oscar Brito (@aetheon) 2014年3月15日
@aetheon @cowboy 查找 angular DI 注解风格,它与 AMD 模块非常兼容。
— Tim Branyen (@tbranyen) 2014年3月15日
Angular.js 和 AMD
最近,我尝试将一些 AMD 模块集成到一个 angularjs 应用程序中。我没有花太多时间在上面,但我的印象是集成并不直接。在这个 Twitter 线程中,@tbranyen 指出,使用 angular 依赖注入注解,我可以轻松地重用现有的require.js 模块。我必须在我的下一个项目上尝试一下。
AMD 与 CommonJS
首先,我必须说,我理解 CommonJS 支持者的观点,但require.js 配置文件给了我额外的能力……
requirejs 的一个很棒的特性是你可以创建不同的执行上下文。这意味着你可以,例如,将同一模块的不同版本加载到两个不同的上下文执行中。这可能非常强大。
我正在我的 js-utils 项目中使用它,使其只是一个模块仓库,而没有硬性依赖。这意味着 js-utils node_modules 文件夹只会包含很少的引用。
var requirejs = require('requirejs');
requirejs = requirejs.config({
/// isolate this context
context: 'context1',
/// use local packages, located on node_modules
nodeRequire: require,
/// modules baseurl
baseUrl: __dirname,
/// the lookup paths
paths: [ ... ]
});
我不认为自己是require.js 的粉丝,因为
- 我知道它的复杂性需要更大的学习曲线,而这并不总是必要的。
- 我知道 browserify 更简单,并且与 node 模块兼容。
- 我知道它的语法可能非常冗长。
- 我知道 r.js 需要很多改进。
- 我知道 r.js 源码映射几乎没用(变量和函数已经被压缩)。
但我同时也知道
- 我可以在require.js 配置文件中创建复杂的依赖关系
- 我可以在require.js 配置文件中创建友好的别名
- 我可以通过更改配置文件轻松更改依赖项的版本
- 我可以使用不同的执行上下文
如果我说错了什么,请告诉我,因为我真的很想听听您对此事的想法!
访问 www.divhide.com 以获取更多信息、联系方式和有关 Web 开发的最新消息。
在 blog.divhide.com 查看其他博客文章。
Divhide 的目标是遵循 HTML5 运动并贡献能够证明技术质量的应用程序。
请随时 联系 divhide。