使用RequireJS和AMD来发布包含内部依赖项的项目
Using RequireJS and AMD to distribute a project that contains internal dependencies
我已经创建了一个开源的JavaScript表单验证库。最近一个贡献者帮助修改了我的库以支持AMD。在过去的一两个月里,我一直在重构我的库,以增强可维护性、模块化和可读性。本质上,我已经将逻辑片段提取到自包含的模块中。然而,这些模块都驻留在主模块中。
在看了AMD是怎么做的之后,我觉得如果我能把这些内部模块分成它们自己单独的文件,那将是有益的。我有Java背景,从这个角度来看,这些单独的模块对我来说就像类一样,我想把它们分开。这也将帮助我更好地管理我的依赖关系,并实施适当的模块化。我认为从长远来看,这将使代码更好。
我知道RequireJS有一个"优化"特性,它可以将所有的依赖组合到一个文件中,并将其最小化。
我的问题是:这个缩小的文件也会是AMD兼容的吗?也就是说,文件是否会将自己暴露为AMD模块?项目本身的依赖项都是内部的,我不想单独暴露它们。但是,我仍然希望开发人员能够将我的库作为一个自包含的模块导入。
这个缩小的文件是否也与AMD兼容?也就是将文件将自己暴露为AMD模块?
Require.js不需要生成AMD兼容模块。你必须使你的库与AMD兼容。它应该发生在您的main
文件中。你可以从lowdash中学到怎么做。他们创建了兼容Node和Require.js的库。他们基本上是在寻找全局变量来检测Node和Require。
/** Detect free variable `exports` */
var freeExports = typeof exports == 'object' && exports;
/** Detect free variable `module` */
var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;
/** Detect free variable `global` and use it as `window` */
var freeGlobal = typeof global == 'object' && global;
if (freeGlobal.global === freeGlobal) {
window = freeGlobal;
}
结尾:
// if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
// Expose Lo-Dash to the global object even when an AMD loader is present in
// case Lo-Dash was injected by a third-party script and not intended to be
// loaded as a module. The global assignment can be reverted in the Lo-Dash
// module via its `noConflict()` method.
window._ = _;
// define as an anonymous module so, through path mapping, it can be
// referenced as the "underscore" module
define(function() {
return _;
});
}
// check for `exports` after `define` in case a build optimizer adds an `exports` object
else if (freeExports && !freeExports.nodeType) {
// in Node.js or RingoJS v0.8.0+
if (freeModule) {
(freeModule.exports = _)._ = _;
}
// in Narwhal or RingoJS v0.7.0-
else {
freeExports._ = _;
}
}
else {
// in a browser or Rhino
window._ = _;
}
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- AngularJs指令,该指令创建内部有数据对象的新指令
- 如何使用内部对象构造对象
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 用Javascript修改内部标记的CSS规则
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 如何将本地依赖项添加到npm项目中
- 如何使用jasmine节点监视依赖模块内部的方法
- 模拟requireJS的内部依赖关系
- 使用内部脚本更改表单元格 css,而不依赖于 id、类或包含
- 使用browserify将内部库依赖项导出到外部作用域
- 使用RequireJS和AMD来发布包含内部依赖项的项目