[英]Trying to use a non-AMD module in require
我試圖使用我在requirejs中擁有的非AMD JS模塊(稱為mymodule)。 這是第一次嘗試這樣做。 按照從bootstrap-amd和underscore-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來說卻很新。 想以正確的方式做事。 如前所述,我還要保留獨立使用模塊的選項。 謝謝您在這里的任何指點,謝謝。
您需要使模塊依賴jQuery,並將引用傳遞給將定義模塊的函數。 將定義模塊的代碼更改為:
if(typeof define === "function" && define.amd) {
define(['jquery'], factory);
}
else
mymodule = factory(jQuery);
對於不是AMD的情況,則需要else部分,因為您現在正在使用出廠功能。 (您也可以有一個分支來處理諸如Node之類的CommonJS環境,但我不在這里添加它。)
然后創建一個定義模塊的函數:
function factory($) {
// define the module
return mymodule;
}
整個過程可以包裝在IIFE中,以避免factory
污染全球空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.