requirejs依赖关系分组

时间:2016-12-22 08:02:45

标签: javascript html requirejs amd

我正在尝试将requirejs框架集成到我的应用中。

是否可以创建虚拟模块(它不作为物理文件存在),我可以将所有jquery-validation个插件组合在一起?

例如,我每次想要使用jquery-validate时都需要加载4个依赖项。

每次都创建 jquery-val "虚拟模块"而不是请求它们,它应该自动请求所有依赖项。

然而,试图加载" jquery-val"实际上是尝试从磁盘加载文件(我没有)。

解决此问题的最佳做法是什么?

// config
requirejs.config({
    baseUrl: '/Content',
    paths: {
        'jquery': 'frameworks/jquery-3.1.1.min',
        "jquery-validate": "frameworks/jquery.validate.min",
        "jquery-validate-unobtrusive": "frameworks/jquery.validate.unobtrusive.min",
        "jquery-unobtrusive-ajax": "frameworks/jquery.unobtrusive-ajax.min"
    },
    shim: {
        "jquery-val": ["jquery", "jquery-validate", "jquery-validate-unobtrusive", "jquery-unobtrusive-ajax"]
    }
});


// Solution 1: working, but ugly
define(["jquery", "jquery-validate-unobtrusive", "jquery-unobtrusive-ajax"], function ($) {
    // My Module
});

// Solution 2: not working
define(["jquery-val"], function () {
    // My Module
});

// Solution 3: create jquery-val.js file, which loads the dependencies automatically
// jquery-val.js
(function (global) {
    define(["jquery", "jquery-validate-unobtrusive", "jquery-unobtrusive-ajax"], function ($) {

    });
}(this));

1 个答案:

答案 0 :(得分:0)

需要一些时间阅读:

http://requirejs.org/docs/api.html#modulenotes

  

每个文件一个模块:考虑到模块名称到文件路径查找算法的性质,每个JavaScript文件只应定义一个模块。您只需使用优化工具将多个模块分组为优化文件。

Optimization Tool

回答你的问题: 最好定义每个文件一个模块,因此您不需要为模块定义显式名称,并且需要在加载其他模块之前将其插入某个可用的位置。

所以你可能只需要文件:require(“../ services / myGroupModule”),这个文件将保存你的模块,requireJS将负责加载依赖项(以及后来优化连接到一个文件!) 。这里模块名称是文件名。

然而,您可以执行以下操作并将其作为文件模块加载,或者您尝试事先定义它并为模块命名:

//Explicitly defines the "foo/title" module:
define("myGroupModule",
    ["dependency1", "dependency2"],
    function(dependency1, dependency2) {
        return function myGroupModule {
            return {
                doSomething: function () { console.log("hey"); }
            }
        }
   }
);

也许您还应该看看一些新的模块加载器:

WebPack 2:https://webpack.js.org/

SystemJS:https://github.com/systemjs/systemjs