簡體   English   中英

嘗試在require中使用非AMD模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM