RequireJS插件,按需加载文件

时间:2013-06-12 18:25:41

标签: requirejs

我已经将RequireJS实现得很好,并且基于Grunt的构建过程通过r.js将所有JS文件应用程序优化到一个文件中,这也很好。我的所有应用程序文件都连接成一个大的JS文件,以实现高效的生产部署。 现在我有以下要求: 我需要为requirejs编写一个插件,它不会在构建过程中加载(不包括文件)到优化文件中,但需要按需提供: 我的代码中的含义我将:

var myObj = require("myplugIn!jsFile");

所以最后当这一行运行时,它将以2个选项运行:

  1. 在构建过程中,该文件未包含在优化文件中
  2. 应用程序正在运行,它将按需请求文件。
  3. 我编写了以下插件,但无效:

    define(function () {
    "use strict";
    return {
        load : function (name, req, onload, config) {
            // we go inside here we are running the application not in build process
            if (!config.isBuild) {
                req([name], function () {
                        onload(arguments[0]);
                    });                
            } 
        }
    };
    });
    

    我在这里缺少什么。 谢谢你的推荐

2 个答案:

答案 0 :(得分:2)

在构建配置中,您可以排除不想捆绑的文件。它们仍然会在需要时按需加载。你也可以这样做:

define(function (){
    // module code...

    if (condition){
        require(['mymodule'], function () {
            // execute when mymodule has loaded.
        });
    }

}):

这种方式只有在满足条件时才会加载mymodule。而且只有一次,如果你在其他地方使用相同的模块依赖,它将返回加载的模块。

答案 1 :(得分:0)

我觉得更简单,如果帮助某人,我发布了解决方案,我创建了一个插件,在构建过程中没有返回任何内容,在运行时,返回所需的文件,希望帮助某人。

define(function () {
"use strict";

return {
    load : function (name, req, onload, config) {
        if (config.isBuild) {
            onload(null);
        } else {
            req([name], function () {
                onload(arguments[0]);
            });
        }
    }
};

});