我正在尝试将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));
答案 0 :(得分:0)
需要一些时间阅读:
http://requirejs.org/docs/api.html#modulenotes
每个文件一个模块:考虑到模块名称到文件路径查找算法的性质,每个JavaScript文件只应定义一个模块。您只需使用优化工具将多个模块分组为优化文件。
回答你的问题: 最好定义每个文件一个模块,因此您不需要为模块定义显式名称,并且需要在加载其他模块之前将其插入某个可用的位置。
所以你可能只需要文件: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