2012-10-03 36 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文件中。它也可以被缩小。不支持在运行时加载模块