2015-01-20 95 views
3

我有一個具有2個AMD依賴關係的Chrome擴展內容腳本。當我使用requirejs「require」函數加載依賴項時,該腳本正常工作。如何導入TypeScript AMD模塊而不將相關代碼作爲模塊

我移植劇本與我的項目的其餘部分以打字稿,和現在使用

進口依存度=要求(「依賴」);

這是一切都很好,模塊已移植到TS,並在項目的其他部分工作正常。

我的問題是,只要我添加一個導入語句,TS編譯器就想讓我的腳本進入一個模塊,並在生成的JS中導入使用requirejs「define」的模塊。我的chrome擴展並不太興奮,當我運行它時,我得到一個「不匹配的匿名定義」錯誤。

有什麼辦法讓打字稿編譯器使用require函數來加載我的模塊,而不是讓我的腳本成爲模塊嗎?我很難找到這方面的任何信息。

+0

Downvoter要發表評論,以他們的想法。這實際上是一個非常好的問題,並且有一個非顯而易見的答案。 – 2015-01-21 03:28:56

回答

1

處理此問題的最佳方法是使用commonjs標誌進行實際編譯,並使用TypeScript編譯器實際上不發出require語句(如果未在值位置使用模塊導入)的事實。這與Modules in TypeScript頁面中記錄的「可選模塊加載」高級方案類似。

示例代碼:

declare var require: any; // If needed 
import _a = require('Dependency'); 
import _b = require('SomeOtherDependency'); 

var a: typeof _a = require('Dependency'); 
var b: typeof _b = require('SomeOtherDependency'); 

// Use 'a' and 'b' in your code. Do not use _a or _b. 
a.doSomething(); 
+0

感謝您的回答。隨着我的項目設置的方式,我寧願堅持AMD,所以這不能解決我的問題,但肯定是有用的信息。這是一種簡短的程序腳本,所以我現在可以把它作爲一個JS文件,或者最糟糕的情況是將清單指向一個加載它的js文件。這只是一個小方面的項目,我計劃一旦支持它們就切換到ES6模塊,所以這不是什麼大問題。 – 2015-01-21 18:40:16

相關問題