我想以某种方式创建我的模块,它们可以与 requirejs 一起使用,也可以不与 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.js(这是我的主文件)
define(function(){
...
return animate;
});
动画/模块/easing.js(这是一个模块文件)
(功能(){
var 轻松 = 函数(){
// 使用 animate.js 中的 animate main 函数
// 动画在这里不可用
...
};
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;
}
});