打字稿为什么以及何时需要

时间:2013-06-16 18:18:55

标签: visual-studio-2012 requirejs typescript

对于为什么以及何时需要使用Typescript,这是一个更普遍的问题。 我以前在requireJs上做了一些工作,并且在部署之前总是使用r.js构建脚本。 据我所知,合并所有js文件(模块)的构建脚本,是为了降低http请求的数量,并提供一种模块化代码的方法。

我的问题是:由于打字稿已经提供了一种将代码分离到模块的简单方法,为什么不合并 生成的js文件,而不是使用requirejs处理模块的额外步骤? 如果在大型项目上工作,我理解所有js不应该一次加载,但我认为仍然会以某种方式捆绑模块。

编辑:更具体一点: 为什么使用requireJs来管理我的模块,而不仅仅是坚持使用typescript内部模块,据我所知,它也可以在运行时加载。基于amd和requirejs的内部模块与外部模块。

3 个答案:

答案 0 :(得分:7)

您选择使用RequireJS在浏览器中运行TypeScript程序的唯一原因是,如果您有数百个模块,但页面可能只需要两个或三个来执行其操作。我们在这里谈论严肃的大型程序,而不是轻量级的应用程序或网页的其他时髦的东西。

将RequireJS用于一个非常大的应用程序意味着你只需要加载你真正需要的脚本 - 而不仅仅是以防万一。

为了举例,假设您将Microsoft Office编写为TypeScript程序,您可以使用RequireJS根据需要加载所需的内容。因此,首先,您将加载探索文件所需的内容,然后在选择文件时,将导致该模块(可能是Word)加载其依赖项。这可能意味着你只用几个小块下载了10%的程序。

模块加载器

TypeScript没有自己的模块加载器。它将TypeScript编译为JavaScript,将模块导入语句转换为CommonJS或AMD样式代码。异步模块定义(AMD)是RequireJS使用的模块格式。 NodeJS使用CommonJS模块。无论您使用的是TypeScript还是JavaScript,都需要依赖这些模块加载器。

TypeScript只是转换它:

import myModule = module('mymodule');

根据TypeScript Language Specification的第10.4节,进入requiredefine语句。

答案 1 :(得分:2)

如果在页面加载期间只加载一个JS-File,则不需要requireJS 如果你有多个js文件,你需要requireJS,如果你想要它们不是在index.html中加载,而是在你的脚本运行期间加载。这些将被异步加载,只加载一次。需要脚本后的代码仅在加载所需脚本后执行。 当您不确定用户是否完全需要模块时,这对于延迟加载尤其有用 另一个好处是模块依赖性在每个模块中定义,因为需要其他模块工作的每个模块都可以包含适当的“require” - 语句。

答案 2 :(得分:1)

对于您所描述的用例,您不需要requireJS,因为您不需要手动合并生成的js文件。打字稿编译器可以为您做到这一点。您可以为--out file.js命令指定tsc选项。这将编译所有.ts文件并生成单个JavaScript输出文件。这允许您使用Typescript module关键字将代码拆分为单独的.ts文件中的模块,并合并它们以进行优化部署。

您可以更改从TypeScript导出到AMD的模块格式。加载这些模块需要RequireJS。另外还有RequireJS的插件除了加载模块之外还可以执行其他操作。异步加载文本文件