requireJS模块加载

New*_*oma 3 javascript jquery requirejs

我需要一些帮助,只需要在需要时使用requireJS加载模块

这是我的main.js

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

})
Run Code Online (Sandbox Code Playgroud)

并在somemodule.js

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

somemodule = {
init: function () {
    someothermodule.init()
}
}
return somemodule;
)}
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*rds 7

当您需要module1中的module2使用标准的define()语法时,module1将不会加载/运行,直到module2完全加载.看起来像这样:

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

lazy-load 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
});
Run Code Online (Sandbox Code Playgroud)

现在你必须仔细编程,以确保不会遇到任何异步问题.

在您的情况下,您可以修改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()
            })
        });
    }
})
Run Code Online (Sandbox Code Playgroud)