如何使用 JavaScript 源映射(.map 文件)?

IT技术 javascript source-maps
2021-01-23 02:50:44

最近我看到.js.map一些带有扩展名的文件随一些 JavaScript 库(如Angular)一起提供,这只是在我脑海中提出了几个问题:

  • 它有什么用?为什么 Angular 的人关心交付.js.map文件?
  • 我(作为 JavaScript 开发人员)如何使用该angular.min.js.map文件?
  • 我应该关心.js.map为我的 JavaScript 应用程序创建文件吗?
  • 它是如何创建的?我看了一下,angular.min.js.map里面充满了奇怪格式的字符串,所以我认为它不是手动创建的。
5个回答

这些.map文件用于已缩小的 JavaScript 和 CSS(现在也是 TypeScript)文件。它们被称为源映射当你缩小一个文件时,比如angular.js文件,它需要数千行漂亮的代码,然后把它变成只有几行丑陋的代码。希望当您将代码交付到生产环境时,您使用的是缩小版的代码,而不是完整的未缩小版。当您的应用程序在生产中出现错误时,源映射将帮助您获取丑陋的文件,并允许您查看代码的原始版本。如果您没有源映射,那么任何错误充其量看起来都是神秘的。

CSS 文件也一样。一旦你将一个SassLess文件编译成 CSS,它看起来就完全不像它的原始形式了。如果启用 sourcemaps,那么您可以看到文件的原始状态,而不是修改后的状态。

所以,按顺序回答你的问题:

  • 它有什么用?取消引用丑化代码
  • 开发人员如何使用它?您可以使用它来调试生产应用程序。在开发模式下,您可以使用完整版的 Angular。在生产中,您将使用缩小版本。
  • 我应该关心创建一个 js.map 文件吗?如果您关心能够更轻松地调试生产代码,那么是的,您应该这样做。
  • 它是如何创建的?它是在构建时创建的。有一些构建工具可以像构建其他文件一样为您构建 .map 文件。如果输出文件不在项目根目录中,则源映射失败 #71

我希望这是有道理的。

@frosty取消引用丑化代码你能解释一下吗?.js.map文件不是在手工制作的文件和缩小的文件之间保持关系(通常称为参考)吗?
2021-03-15 02:50:44
请注意,在您调用之前不会发送地图文件,这就是让我感到困惑的原因stackoverflow.com/a/27196201/861487
2021-03-24 02:50:44
@student 它说取消引用,因为我不想引用缩小的代码。它被缩小了,如果我看它,它几乎一文不值。但是,如果它可以将其取消引用回原始来源,那将是史诗般的。这正是 sourcemap 的含义。我希望这有帮助。
2021-03-26 02:50:44

开发人员如何使用它?

  1. 不要在你的index.html文件中链接你的js.map文件(不需要)

  2. 缩小工具(好的)向您的.min.js文件添加注释

    //# sourceMappingURL=yourFileName.min.js.map
    

    这将连接您的.map文件。

    min.jsjs.map文件准备好时...

  3. Chrome:打开dev-tools,导航到Sources选项卡。您将看到保存未缩小的应用程序文件文件夹。

如果缩小的源中不存在此注释并且我无法修改它,我如何从本地文件系统提供源映射?
2021-04-09 02:50:44

我只想关注问题的最后一部分;源映射文件是如何创建的?通过列出我知道可以创建源映射的构建工具。

  1. Grunt:使用插件grunt-contrib-uglify
  2. Gulp:使用插件gulp-uglify
  3. 谷歌关闭:使用参数--create_source_map
我以前使用过一个用 Ruby 编写的工具:github.com/ConradIrwin/ruby-source_map我正在寻找用 python 或 c 编写的东西。
2021-03-17 02:50:44
2021 更新:如果使用 ES6 JS,请尝试使用gulp-terser. gulp-uglify据我了解,不支持 ES6。如果您使用 Babel 转译为 ES5,则没有问题。
2021-03-23 02:50:44

映射文件将未缩小的文件映射到缩小的文件。如果您在未缩小的文件中进行更改,这些更改将自动反映到文件的缩小版本。

重新“将自动反映更改”:假设缩小工具可以吗?此类缩小工具的一些示例是什么?
2021-04-03 02:50:44

只是添加到如何使用地图文件:我使用 Google Chrome for Ubuntu,如果我转到源并单击文件,如果有地图文件,则会出现一条消息,告诉我我可以查看原始文件以及如何查看做吧。

对于我今天使用的 Angular 文件,我单击Ctrl+ P,一个原始文件列表出现在一个小窗口中。

然后我可以浏览列表以查看我想要检查的文件并检查问题可能出在哪里。