在添加AMD模块之前添加非AMD模块
Add non-AMD modules before AMD modules
我正在使用一个项目的要求,我有2个模块:
- a.js:是一个非amd模块,我不能触摸它的代码
- b.js:是我用
define()
函数编写的AMD模块。它需要a.js
工作。 - app.js:是使用
a.js
和b.js
的实际应用代码。
app.js看起来像这样:
//source code for app.js
require(['a.js', 'b.js'],
function( a, b ) {
a.x = 2;//this will fail because 'a' is not defined
});
现在的问题是:app.js
中require()
两个模块的最简单方法是什么?我不能这样做:
//source code for app.js
require(['b.js', 'a.js'],
function( b ) {
a.x = 2;//it works because module 'a' defines a global variable named 'a'
b.x = 2;//this will fail because module 'b' is loaded before 'a' so it doesn't work
});
因为,正如您所说,a.js
导出一个名为a
的全局变量,您可以配置RequireJS
以使用shim配置选项以AMD方式公开它。任何需要a.js
的模块甚至不知道它不是一个合适的模块。在您的情况下,配置将是这样的:
requirejs.config({
shim: {
'a.js': {
exports: 'a' // a.js defines 'window.a'
}
}
});
这是AMD加载程序的标准票价。大多数时候,垫片是不需要的。你的源app.js是正确的,但你没有显示你的源b.js。既然你可以控制b.js,它应该被写为一个依赖a.js的AMD模块
// source code for b.js
// You have to use define, not require, and the dependency on a.js must be here rather than via a nested or internal require
define(['a.js'], function(a){
// your code for b.js
});
这将确保在app.js准备执行时a.js在b.js之前被加载。
相关文章:
- 如何将多个 AMD 模块捆绑在一个文件中
- AMD 模块中的动态导出
- 使用 Babel 将 ES6 模块转换为 ES5 AMD 模块,无法按预期工作
- JavaFX+Javascript:如何将Java对象注入AMD模块
- Javascript应用程序作为具有外部依赖关系的AMD模块
- 如何将预编译的hogan.js模板封装到AMD模块中
- 当混合node和amd模块时,requirejs()返回undefined
- 如何创建一个结构化为AMD模块的可重用库
- 我可以在网络工作者中加载AMD模块吗
- 如何从TypeScript编译中现有的AMD js类继承到AMD模块
- 使用磁带/ES6 单元测试测试 AMD 模块
- 如何将 AMD 模块从单例转换为实例
- 为什么串联的 RequireJS AMD 模块需要一个加载器
- 如何从道场层加载 AMD 模块
- 从前台检索后台页面的 AMD 模块
- 配置需要 js 才能在 javascript 中加载 AMD 模块
- 如何使用 tsc 从打字稿生成 amd 模块
- 如何使用jspm/system.js正确加载本地AMD模块
- Davis.js作为AMD模块
- RequireJS-在require流和内联中加载AMD模块