首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RequireJS配置

RequireJS配置
EN

Stack Overflow用户
提问于 2013-11-12 13:47:32
回答 2查看 675关注 0票数 1

我在moduleA中有一个函数,它必须在加载moduleB之前运行。ModuleA不依赖于任何其他模块,moduleB也有一些依赖项(例如moduleC)。下面的代码可以在没有优化的情况下正常工作:

main-config.js

代码语言:javascript
复制
require.config({
    paths: {
        moduleA: 'modules/moduleA',
        moduleB: "modules/moduleB",       
        moduleC: "modules/moduleC",
    }
});

require(['moduleA'], function (moduleA) {
    moduleA.init(function () {
        require(['moduleB'], function (moduleB) {
            moduleB.start();
        });
    });
});

然而,当使用r.js对其进行优化时,事情会变得一团糟。r.js优化器的输出是:

代码语言:javascript
复制
Tracing dependencies for: ../scripts/main-config
Uglifying file: C:/.../scripts/main-config.js

C:/.../scripts/main-config.js
----------------
C:/.../scripts/libs/require/require.js
C:/.../scripts/modules/moduleA.js
C:/.../scripts/main-config.js

这意味着只有三个模块-- require、moduleA和main-config --一起被丑化为一个最小化的文件。输出文件中缺少所有moduleB的依赖项(如moduleC)。

将配置文件更改为以下内容,将在输出文件中包含所有moduleB的依赖项,但它不会获得所需的结果,因为它在moduleA的init函数之前解析moduleB:

代码语言:javascript
复制
require(['moduleA','moduleB'], function (moduleA, moduleB) {
    moduleA.init(function () {
        moduleB.start();
    });
});

我希望稍后解析moduleB,只在moduleA的init函数之后(moduleB包含一些直接函数)。

如何使所有依赖树都包含在结果文件中,但通过我所需的行为(在moduleB函数完成后解析和运行moduleA )?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 14:43:11

这是因为require for moduleB是嵌套的,并且可能是动态的;默认情况下,r.js不会在输出中包含这样的依赖项。若要覆盖此默认行为,可以将findNestedDependencies设置为true (示例buildconfig文件中有更多详细信息)。

或者,如果您不想为整个项目更改此标志,并且只想为此单个依赖项设置一个异常,则可以将module元素添加到您的buildconfig中:

代码语言:javascript
复制
modules: [{
    name: "main-config",
    // forces moduleB to be included
    include: ["moduleB"]
  },
  // ...
票数 1
EN

Stack Overflow用户

发布于 2013-11-12 14:33:37

一种方法是使用我写的这个小项目:要求-懒惰

有了这个,你就会:

代码语言:javascript
复制
require(['moduleA','lazy!moduleB'], function (moduleA, lazyModuleB) {
    moduleA.init(function () {
        lazyModuleB.get().then(function(moduleB) {
            moduleB.start();
        });
    });
});

为了使用require lazy,您将需要稍微修改构建过程,请参阅示例(简单咕噜/鞠躬)。

否则,您将不得不重构moduleB,使其不需要运行moduleA中的函数;它可能需要moduleA并自行运行这些函数。

另外,尝试要求moduleAmoduleB无论如何,这可以解决问题。

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

https://stackoverflow.com/questions/19930897

复制
相关文章

相似问题

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