我正在尝试在requirejs中使用我拥有的非AMD JS模块(称为mymodule)。这是第一次尝试这样做。按照我从bootstrap-amd和下划线看到的内容,我尝试了以下内容:
// start of mymodule
if(typeof mymodule === "undefined") loaded = {};
mymodule.cache = (function() {
...
return {
...
};
})();
mymodule.main = (function() {
...
return {
doSomethingJQuery: function() { ... }
}
})();
.
.
.
// end of mymodule
// This part I added for the sake of requirejs
if(typeof define === "function" && define.amd) {
define(function() {
return mymodule;
});
}
你可以看到第一部分是我的模块(使用,我希望,良好的JS模块模式:)。我想保留使用独立于require JS的模块的选项,所以如果我不想在另一个项目中使用requirejs,我不必。所以我有点不想将整个模块包装在define(...)函数中......除非通常的做法是使用mymodule.js和mymodule-amd.js文件。
无论如何我的模块加载,
define(["mymodule"], function (mymodule) {
// do it - ReferenceError: jQuery is not defined :(
mymodule.doSomethingJQuery();
.
.
.
..但是因为doSomethingJQuery()依赖于jQuery,我收到一个错误。我如何在这里引入jQuery,还是应该以不同的方式完成?我试图找到一些例子,但对于requirejs来说却是新手。想以正确的方式做事。如上所述,我还想保留独立使用模块的选项。非常感谢这里的任何指示,谢谢。
答案 0 :(得分:0)
您需要使您的模块依赖于jQuery并将引用传递给将定义您的模块的函数。将定义模块的代码更改为:
if(typeof define === "function" && define.amd) {
define(['jquery'], factory);
}
else
mymodule = factory(jQuery);
对于非AMD的情况,其他部分是必要的,因为您现在正在使用工厂功能。 (您也可以有一个分支来处理像Node这样的CommonJS环境,但我不会在这里添加它。)
然后创建一个定义模块的函数:
function factory($) {
// define the module
return mymodule;
}
整个事物可以包含在IIFE中,以避免使用factory
污染全球空间。