簡體   English   中英

使用ReqiureJS擁有第三方庫的本地實例

[英]Using ReqiureJS to have local instances of 3rd party libraries

我的應用程序的JavaScript使用jQuery和jQuery插件,並且在我無法控制的“敵對”環境中運行(這是eCommerce平台的PHP擴展)。 因此,在有人將附加他的jQuery / plugins實例(由其他擴展名引入)之前或之后,或者在此之后有人將在頁面呈現后動態加載jQuery時,無法確定是否執行我的jQuery代碼。

基本上,問題在於其他擴展也可以使用jQuery(帶有插件),並且僅將jQuery與tag連接是行不通的。

我有一種強烈的感覺,RequireJS可能會幫助我將所需版本的jQuery插件加載到封裝的作用域中,直到特定版本的jQuery插件為止,而不會污染全局作用域(因此其他擴展仍將正常運行)。 然后,將所有代碼包裝為“ require”語句,它將使用其自己的jQuery和插件集運行。 我嘗試了這種方法,並且進行了某種工作(雖然還沒有在生產環境中進行過測試),但是卻有些奇怪。 似乎這個問題與我遇到的問題有關。 還回答建議使用AMD兼容版本的jQuery。 但是插件呢? 我不認為我使用的所有插件都具有這樣的版本。

所以問題:

可以使用RequireJS來涵蓋這種用例(在未定義的環境中運行jQuery +插件)嗎? 如果可以使用RequireJS,那么將非常感謝任何示例代碼或有關如何正確執行此操作的說明。 如果沒有辦法用RequireJS涵蓋這一點,那么您認為什么是處理問題的最佳方法?

是的,我相信RequireJS可以在這里為您提供幫助。 據我所知,您將不得不做一些腿部工作。 看看(截至2012-08-19)最新jQuery: link的源代碼。 在底部,您可以看到正在設置window.jQuery ,定義了jQuery$ AMD加載程序的define調用在此之后發生,因此無論如何, jQuery都在全球范圍內。 您想要做的是確保您自己的jQuery和插件版本與其他jQuery實例和插件保持隔離,對嗎?

將您的自定義jQuery和插件放在它們自己的目錄中(我們將其稱為“ jqcustom”),並在腳本的define調用中指定依賴項時使用該目錄。 您需要修改jQuery版本,方法是將其包裝在define調用中,並在最底部返回jQuery對象,取出jQuery的window.jQuerywindow.$賦值以及該過程中的默認define調用(這些都在底部,請記住)。 然后,您需要將所有插件包裝在define調用中,並指定自己的jQuery版本作為依賴項。 例:

define(['jqcustom/jquery'], function(jQuery) {
    //inside this method 'jQuery' will override any predefined global window.jQuery

    //in case any plugins use the $ variable, define that locally too
    var $ = jQuery;

    //... plugin code ...

});

如果您使用RequireJS的優化程序,它可以使用其shim config選項為您包裝插件。 jQuery插件通過向jQuery的原型對象添加方法來工作,因此,我相信,只要您使用define包裝將相同的jQuery (您的自定義jqcustom/jquery一個)傳遞給每個插件,這些插件的擴展名都將設置在同一對象上並且可以在隨后的define調用中訪問,這些調用將您的自定義jQuery或自定義插件指定為依賴項。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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