dependencies - requireJS 2.1.5 嵌套 require 的依赖关系乱序

标签 dependencies requirejs

这是我的代码流程:

main.js --> jquerymobile --> router --> extra --> lib1 --> lib2

在 extra.js 中,加载 lib2 后,我设置了我的模块

//extra.js
require( ['lib1'], function () {
        $("#body").append('<p>got lib1</p>');
        require(['lib2'], 
            $("#body").append( '<p>got lib2</p>' );
            window.stuff = true;
            $("#body").append( '<p>set my module</
        });

});

在我的 router.js 中,我在加载额外内容后使用我的模块:

//router.js
require(['../extra'], function() {
        $("#body").append( '<p>using my module</p>' );
        console.log( window.stuff );
    });

我希望在 router.js 中使用我的模块之前先对其进行设置。然而,这是我得到的顺序:

set my router
using my module
got lib1
got lib2
set my module

当然,当我尝试使用我的模块(window.stuff)时,我会得到未定义的结果。

以下是此错误的演示:https://dl.dropbox.com/u/19311981/demo.zip

你们能帮我找出我在指定依赖项时做错了什么吗?

最佳答案

确保额外返回时加载 lib1 和 lib2 的唯一方法是使用 define syntax并预先将它们声明为依赖项。稍后执行此操作类似于任何其他异步调用。你不知道它什么时候会回来。

//extra.js
define(['lib1', 'lib2'], function(lib1, lib2) {
    $("#body").append('<p>got lib1</p>');
    $("#body").append( '<p>got lib2</p>' );
    window.stuff = true;
    $("#body").append( '<p>set my module</
    return something;
});

您可能还想重新考虑使用全局 window.something 变量作为模块的通信方法。相反,让模块返回一些您可以使用的对象:

//router.js
require(['../extra'], function(extra) {
    $("#body").append( '<p>using my module</p>' );
    console.log( extra );
});

关于dependencies - requireJS 2.1.5 嵌套 require 的依赖关系乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672706/

相关文章:

github - 使用 CLI 从 Github 中的项目获取依赖项

qt - 是否可以在 qmake 中为 Makefile 添加依赖项?

c# - 如何获得我的 C# 项目之间的依赖关系图

windows - Node 中的简单 RequireJS

javascript - CWSpear 的悬停下拉菜单准备好了吗(requirejs)?

c++ - 循环依赖?

javascript - 使用 npm 安装或更新所需的包,就像 ruby​​gems 的 bundler

javascript - 使用 r.js 编译时为 "ReferenceError: window is not defined"

javascript - 主干网和 jquerymobile :can't disable routing

ruby-on-rails - require.js 和带有 Rails 的预编译 Assets