2012-10-03 44 views
14

看起來TypeScript有一個很好的模塊系統,但是這是否取代requirejs之類的東西呢?換句話說,當你「編譯」一個打印腳本包時,它是否會爲你處理所有的依賴關係解析?例如,將不勝感激!TypeScript包管理

回答

16

TypeScript沒有運行時模塊加載器。您仍然需要提供一個模塊加載器以在運行時使用,例如需要js。 TypeScript支持生成與commonJS(用於node.js腳本)和AMD加載器(例如requireJS)兼容的JavaScript代碼。指定在「--module」中使用哪一個傳遞給具有「amd」或「commonjs」的編譯器。

這裏是你如何在打字稿導出模塊:

export module depModule { 
    export class A { 
    } 
} 

,這裏是生成的JavaScript代碼--module AMD開關:

define(["require", "exports"], function(require, exports) { 
    (function (depModule) { 
     var A = (function() { 
      function A() { } 
      return A; 
     })(); 
     depModule.A = A; 
    })(exports.depModule || (exports.depModule = {})); 
}) 
3

打字稿可以發出代碼,將與合作AMD兼容的依賴裝載器,比如像require這樣的requirejs或commonjs環境。你可以用編譯器的--module選項來控制它。編譯器本身不會在運行時處理依賴關係解析,這取決於您的工作,但它在編譯時嘗試解決依賴關係,因此它可以爲您提供類型信息。

例如,您可以看到在CodePlex的測試目錄中使用模塊的項目示例,例如this one。編譯這些測試項目的輸出是.js文件,可以使用例如requirejs(如果傳遞--module amd)或Node(如果傳遞--module commonjs)加載.js文件。

2

如果您的應用程序將僅由打字稿模塊/文件組成,則可以不使用模塊加載程序或其他依賴項管理。您需要將所有依賴關係包含在註釋引用中,並使用編譯器的--out選項。例如:

tsc --out compiled.js app.ts 

這將投入compiled.js爲app.ts及其所有依賴性,包括依賴的依賴所產生的JS。然後可以將生成的文件直接包含在帶有腳本標籤的html文件中。它也可以被縮小。不支持在運行時加載模塊