看起来 TypeScript 有一个不错的模块系统,但这是否取代了对 requirejs 之类的需求?换句话说,当你“编译”一个 typescript 包时,它会为你处理所有依赖解析吗?示例将不胜感激!
3 回答
TypeScript 没有运行时模块加载器。您仍然需要提供一个在运行时使用的模块加载器,例如 require js。TypeScript 支持生成与 commonJS(用于 node.js 脚本)和 AMD 加载器(例如 requireJS)兼容的 JavaScript 代码。要指定使用哪一个,请使用“amd”或“commonjs”将“--module”切换到编译器。
以下是在 TypeScript 中导出模块的方法:
export module depModule {
export class A {
}
}
这是使用 --module amd 开关生成的 JavaScript 代码:
define(["require", "exports"], function(require, exports) {
(function (depModule) {
var A = (function () {
function A() { }
return A;
})();
depModule.A = A;
})(exports.depModule || (exports.depModule = {}));
})
TypeScript 可以生成适用于 AMD 兼容的依赖加载器(如 requirejs)或 commonjs 环境(如 Node.js)的代码。您可以使用编译器的 --module 选项来控制它。编译器本身不会在运行时处理依赖关系解析,这取决于您的工作,但它会尝试在编译时解析依赖关系,以便它可以为您提供类型信息。
您可以在 CodePlex 的测试目录中看到使用模块的项目示例,例如这个。编译这些测试项目的输出是 .js 文件,可以使用例如 requirejs(如果您通过 --module amd)或 Node(如果您通过 --module commonjs)加载。
如果您的应用程序仅由 typescript 模块/文件组成,则可以不使用模块加载器或其他依赖项管理。您需要将所有依赖项包含在注释引用中,并使用编译器的 --out 选项。例如:
tsc --out compiled.js app.ts
这会将 app.ts 及其所有依赖项(包括依赖项的依赖项)生成的 js 放入compiled.js。然后可以将生成的文件直接包含在带有 script 标签的 html 文件中。也可以缩小。不支持在运行时加载模块