我看过TypeScript的.map
个文件。我想知道的是这些文件的用途。它们是否包含对.ts文件中引用的其他文件的引用?
答案 0 :(得分:77)
.map文件是源映射文件,它允许工具在发出的JavaScript代码和创建它的TypeScript源文件之间进行映射。许多调试器(例如Visual Studio或Chrome的开发工具)都可以使用这些文件,因此您可以调试TypeScript文件而不是JavaScript文件。
这是由某些minifiers和其他编译到JS语言(如CoffeeScript)生成的源地图格式相同。
答案 1 :(得分:7)
源地图基本上就是它所说的,从一种语言到的地图 另一个,所以调试器可以运行JavaScript代码,但显示 实际生成它的行。
用于实际调试目的:
源映射允许您在 TypeScript 文件上设置断点,然后调试代码。这可以在Chrome和Firefox中完成。有点令人困惑的是,Chrome中的调试器行为是,当达到断点时,' .js'文件实际显示(在断点处停止)。
截至今天,Firefox调试器将在中断时显示实际的TypeScript文件。请参阅以下参考:
(这也显示了如何配置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
}
}
就是这样!希望有帮助。