javascript - requireJS模块加载

标签 javascript jquery requirejs

我需要一些关于只在需要时使用 requireJS 加载模块的概念的帮助

这是我的 main.js

require(['jquery', 'path/somemodule'],
function($, somemodule) {
$(document).ready(function() {
    somemodule.init()
})

})

在 somemodule.js 中

 define(['jquery', 'path/someothermodule'], function ($, someothermodule) {
 "use strict";
var somemodule;

somemodule = {
init: function () {
    someothermodule.init()
}
}
return somemodule;
)}

现在 somemodule.js 和 someothermodule.js 被加载到所有页面上。如何仅在需要时加载它?

最佳答案

当您使用标准 define() 语法从 module1 请求 module2 时,module1 将不会加载/运行,直到 module2 完全加载。看起来像这样:

// inside module1
define(['module2'], function(mod2) {
   // we don't get here until AFTER module2 has already been loaded
});

延迟加载 module2 的替代方案如下所示:

// inside module1
define([], function() {
   require(['module2'], function(mod2) {
       // we don't get here until AFTER module2 has already been loaded
   });
   // but we DO get here without having loaded module2
});

现在您必须稍微小心地进行编程,以确保您不会遇到任何异步问题。

在您的情况下,您可以修改 main.js 文件

require(['jquery'],
function($) {
    // jquery is loaded, but somemodule has not

    if(thisPageNeedsSomeModule) {
        require(['path/somemodule'],
        function(somemodule) {
            // now somemodule has loaded
            $(document).ready(function() {
                somemodule.init()
            })
        });
    }
})

关于javascript - requireJS模块加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436607/

相关文章:

javascript - 如何在数组中存储对象的 JSON 数组的键值

javascript - 使用 jquery 计算动态创建的 html 元素

javascript - 单击事件时使用 jQuery 在 Smarty 输入字段中动态主机名

javascript - 如何使用Mediaelement Player实现可点击的音频章节链接?

javascript - 测试与 Jasmine 异步的 requireJS 方法

javascript - 启动 ASP.NET MVC 4 项目。如果我使用捆绑,是否有必要使用 RequireJS?

javascript - 向节点添加调整大小句柄

jquery - 具有接触边界的 div 网格 - 停止加倍

javascript - jqueryui 和 svg 的反弹效果

angularjs - 使用 grunt 和 r.js/requirejs 手动引导