什么是TypeScript Map文件?

时间:2013-07-05 17:00:55

标签: typescript

我看过TypeScript的.map个文件。我想知道的是这些文件的用途。它们是否包含对.ts文件中引用的其他文件的引用?

3 个答案:

答案 0 :(得分:77)

.map文件是源映射文件,它允许工具在发出的JavaScript代码和创建它的TypeScript源文件之间进行映射。许多调试器(例如Visual Studio或Chrome的开发工具)都可以使用这些文件,因此您可以调试TypeScript文件而不是JavaScript文件。

这是由某些minifiers和其他编译到JS语言(如CoffeeScript)生成的源地图格式相同。

答案 1 :(得分:7)

  

源地图基本上就是它所说的,从一种语言到的地图   另一个,所以调试器可以运行JavaScript代码,但显示   实际生成它的行。

用于实际调试目的:

源映射允许您在 TypeScript 文件上设置断点,然后调试代码。这可以在Chrome和Firefox中完成。有点令人困惑的是,Chrome中的调试器行为是,当达到断点时,' .js'文件实际显示(在断点处停止)。

截至今天,Firefox调试器将在中断时显示实际的TypeScript文件。请参阅以下参考:

http://www.gamefromscratch.com/post/2014/05/27/TypeScript-debugging-in-Visual-Studio-with-IE-Chrome-and-Firefox-using-Source-Maps.aspx

(这也显示了如何配置Visual Studio以创建源地图)

要了解源地图的工作原理,您可以阅读“源地图的解剖结构”部分。这里:

https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

答案 2 :(得分:3)

在Typescript中,最常见的.map文件有两种类型。一个是源映射(.js.map),另一个是声明映射(.d.ts.map)。我将一一详细解释。


源地图:.js.map

源映射(.js.map)文件包含映射定义,这些定义将您生成的Javascript代码的每一段链接回相应Typescript文件的特定行和列。这些文件中的映射定义为JSON格式。

启用源映射后,在调试时,Visual Studio Code和Chrome DevTools将显示您的Typescript代码,而不是生成的复杂Javascript代码。

为什么要使用源地图?

例如,在生产应用中,我们使用诸如Rollup的构建工具来删除无效代码,使用Prepack来消除代码,并使用可以在编译时而不是运行时进行评估的计算来替换代码,然后使用Uglify来最小化代码。更不用说已经转译过的Javascript代码的复杂性了。因此,生成的代码可能与您实际编写的代码有很大不同。因此,建议您使用源映射,因为您可以逐步浏览原始源代码,因此调试起来非常容易。

Sentry,Bugsnag,PM2,Winston等过程监视,错误监视,日志记录和堆栈跟踪工具还使用源映射将Javascript异常堆栈跟踪中的行和列映射回Typescript。

如何使用源地图?

您可以通过在编译时使用--sourceMap选项或在项目的compilerOptions文件的tsconfig.json中指定源地图来启用源地图,如下所示:

{
  "compilerOptions": {
    ...
    "sourceMap": true,
    "outDir": "./out"
  }
}

源地图的安全说明:

如果您希望通过混淆浏览器代码来实现某种安全性,则可能需要从生产应用程序的浏览器代码中排除源地图。


声明映射:.d.ts.map

声明图(.d.ts.map)文件也称为声明源图,包含将.d.ts文件中生成的每个类型声明链接回原始源文件(.ts)的映射定义。这些文件中的映射定义为JSON格式。

这对代码导航很有帮助。当您使用项目引用将一个大项目分成多个小项目时,您将能够使用“转到定义”和“重命名”等编辑器功能来透明地浏览和编辑子项目中的代码。

要启用声明映射,请在项目的tsconfig.json文件中指定以下两个选项:

{
  "compilerOptions": {
    ...
    "declaration": true,
    "declarationMap": true
  }
}

就是这样!希望有帮助。