首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AMD模块之前添加非AMD模块

在AMD模块之前添加非AMD模块
EN

Stack Overflow用户
提问于 2013-03-16 10:26:37
回答 2查看 171关注 0票数 0

我在一个项目中使用了requirejs,我有两个模块:

  • a.js:是一个非AMD模块,我不能碰它的代码。
  • b.js:是我用define()函数编写的一个AMD模块。它需要a.js才能工作。
  • app.js:是使用a.jsb.js的实际应用程序代码。

app.js看起来是这样的:

代码语言:javascript
复制
//source code for app.js
require(['a.js', 'b.js'],
function( a, b ) {
    a.x = 2;//this will fail because 'a' is not defined
});

现在的问题是:在require()中用app.js实现两个模块的最简单方法是什么?我不能这样做:

代码语言:javascript
复制
//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
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-16 11:59:29

正如您所说的,由于a.js导出一个名为a的全局变量,所以可以配置RequireJS以使用shim配置选项的方式公开它。任何需要a.js的模块都不知道它不是一个合适的模块。在您的示例中,配置如下所示:

代码语言:javascript
复制
requirejs.config({
    shim: {
        'a.js': {
            exports: 'a' // a.js defines 'window.a'
        }
    }
});
票数 2
EN

Stack Overflow用户

发布于 2013-04-15 17:43:59

这是AMD装载机的标准票价。大多数情况下,不需要垫片。您的app.js源是正确的,但是您没有显示您的b.js源。由于您对b.js有控制,所以应该将其编写为一个依赖于a.js的AMD模块。

代码语言:javascript
复制
// 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
});

这将确保在a.js准备执行时在b.js之前加载app.js。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15448134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档