我正在使用background.js
和popup.js
腳本編寫Chrome擴展插件。Closure編譯器:如何編譯帶擴展名的Chrome擴展插件
在background.js
:
function foo(){
// Does something
}
在popup.js
:
var backgroundPage = chrome.extension.getBackgroundPage();
backgroundPage.foo();
編譯這兩個文件分開的意志,當然,打破backgroundPage.foo()
參考,因爲foo
獲取background.js
和popup.js
不同改名。
我知道解決這個問題的「正確」方法是使用window["foo"] = foo;
在background.js
中導出foo
,但我希望儘可能避免出口(使代碼儘可能不可讀)。
我試過在一個運行編譯腳本和使用--module
它們分割成單獨的輸出文件:
java -jar compiler.jar
--compilation_level ADVANCED_OPTIMIZATIONS--js background.js popup.js
--module backgroundMin:1
--module popupMin:1:backgroundMin
毫不奇怪,這並不工作,因爲編譯器不知道backgroundPage
在popup.js
與background.js
中的window
相同。我嘗試使用@lends
,@borrows
和@memberOf
進行註釋,但無法使其正常工作。
所以我的問題是:是否有可能編譯既background.js
和popup.js
所以foo()
被更名 - 沒有出口foo()
並沒有打破從popup.js
參考?
我假設你是指第一個代碼塊進入'background.js',第二個代碼塊進入'popup.js',對吧?我看到了這個想法,但是編譯器決定它可以在'popupMin.ks'裏面移動'foo()',這是行不通的,因爲'foo()'可以包含對'background.js'中其他變量的引用將不會從'background.js'中調用)。也許我只是做錯了。 – Woodgnome
在'background.js'中,你必須有:var myWindow = new MyWindow(); myWindow.foo();'如果在兩個模塊中都使用它,編譯器將不會移動代碼,但是您必須始終引用該函數。 –
如果'foo()'實際上從未在'background.js'中實際調用過(而且不應該),但是由於依賴於其他函數,必須在'background.js'中?如果你有'background.js'和'popup'。js'腳本文件,在編譯後爲您提供預期的輸出,我很感激您是否可以將它們編輯爲您的答案。 – Woodgnome