我刚尝试着对我们的一个模块进行包装,这个模块可以通过
我刚尝试着对我们的一个模块进行包装,这个模块可以通过
你是想为内部模块还是外部模块做这个?
如果你不需要引入其他模块,那么是否可能在假定 AMD 的情况下构建你的模块,然后在代码的其他地方将 define() 函数卸载掉?当然,你必须使用具名模块,但无论如何你都必须这样做...
如果你的所有模块都从 define() 函数返回它们的输出,那么就会比较简单,你的替代 define 函数可能看起来像这样:
//Whatever additional guards you want could be added, of course...
if (typeof(window.define) === undefined){
window.define = function(name, deps, callback){
window.myNamespace[name] = callback();
};
}
这样至少你不必在每个模块中都加入样板文件...
如果您有一个大型的库,其中包含许多相互依赖的子模块,则可能需要全面使用Require或放弃使用,然后使用整个库周围的包装代码来处理AMD支持,就像Jquery和Knockout JS所做的那样。
define('blah',['jQuery', 'underscore'],function($,_){ ....})
,则您的方法始终会导致 $ === _ === undefined
。 这是我遇到的主要问题,也是我不得不以我所做的方式声明依赖关系的原因。 - George Mauer(function () {
var define, exports = {};
if (window.define && window.define.amd) {
define = window.define;
} else {
exports = window;
define = function (name, dependencies, fn) {
var deps = [];
for (var i = 0; i < dependencies.length; i++)
deps.push(window[dependencies[i]]);
var module = fn.apply(undefined, deps);
if (!window[name]) window[name] = module;
};
}
define('mylib.interaction', ['jQuery', 'mylib.core', 'jQuery.UI'], function($, mylib) {
return /*....blah...*/;
})
})()
typeof window.requirejs == 'function'
。你可能不关心 AMD 实现。相反,测试window.define.amd
。但这只是微调。 - Scott Sauyet