【发布时间】:2014-07-29 04:28:54
【问题描述】:
我想以某种方式创建我的模块,它们可以在有或没有 requirejs 的情况下使用(没有 require js,它们应该可以正常工作,所以我必须确保它们正确加载,比如将脚本标签放在右边顺序)。
所以 jQuery 是这样的:
// export module
if ( typeof define === "function" && define.amd ) {
define(["dep"], function(dep){
dep.fn.test = test;
return dep;
});
}
else{
dep.fn.test = test;
}
实际的模块是这样定义的
var dep = function(...){...}
此定义和导出部分位于 IIFE 中,以将所有内容保持在全局范围之外。
通常它运行良好,但有一个例外,即依赖项不可用。 这个问题可以通过在define部分定义函数来解决,但这意味着定义它两次,在define部分和下面的else部分。
我怎样才能让它工作但只定义一次模块?
我对核心 dep 有“类似插件”的扩展,这些扩展都应该在单独的文件中,因此主 dep 必须作为依赖项传递
顺便说一句,这很好用。但这意味着我要编写两次测试代码。
(function(){
// export module
if ( typeof define === "function" && define.amd ) {
define(["dep"], function(dep){
dep.fn.test = function(){...ssomething using dep...};
return dep;
});
}
else{
dep.fn.test = unction(){...ssomething using dep...};
}
})
好的,我试试另一个例子
animate/animate.js(这是我的主文件)
define(function(){
...
return animate;
});
animate/modules/easing.js(这是一个模块文件) (功能(){ 变轻松 = 函数(){ // 使用 animate.js 中的动画主函数 // 动画在这里不可用 ... };
if ( typeof define === "function" && define.amd ) {
define(["animate/animate"], function(animate){
// animate is available here
...
animate.fn.ease = ease;
return animate;
});
}
else
{
// if no requirejs, animate is global
animate.fn.ease = ease;
}
});
【问题讨论】:
标签: javascript module requirejs