Javascript .map文件-JavaScript源地图


357

最近,我看到.js.map一些JavaScript库(例如Angular)附带了具有扩展名的文件,这在我脑海中引发了几个问题:

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

Answers:


549

.map文件是为jscss(现在ts也是如此)已经过压缩文件。它们被称为SourceMaps。当您缩小文件(例如angular.js文件)时,它将占用数千行漂亮的代码,并将其变成仅几行丑陋的代码。希望在将代码交付生产时,您使用的是最小化的代码,而不是完整的,未最小化的版本。当您的应用在生产中且出现错误时,源地图将帮助您获取丑陋的文件,并允许您查看代码的原始版本。如果您没有源地图,那么任何错误充其量似乎都是神秘的。

CSS文件也一样。一旦获取了SASS或LESS文件并将其编译为CSS,它看起来就不会像原始形式一样。如果启用源地图,则可以看到文件的原始状态,而不是修改后的状态。

因此,依次回答您的问题:

  • 这是为了什么 取消引用丑陋的代码
  • 开发人员如何使用它?您可以使用它来调试生产应用程序。在开发模式下,您可以使用完整版的Angular。在生产中,您将使用缩小版本。
  • 我应该关心创建js.map文件吗?如果您希望能够更轻松地调试生产代码,那么可以,您应该这样做。
  • 如何创建?它是在构建时创建的。有一些构建工具可以像其他文件一样为您构建.map文件。https://github.com/gruntjs/grunt-contrib-uglify/issues/71

我希望这是有道理的。


19
请注意,只有在您调用地图文件后才会发送该地图文件,这就是让我感到困惑的stackoverflow.com/a/27196201/861487
Abdelouahab

2
谢谢亚伦,这是我对Sourcemap看到的更好的描述之一。我正在gulp中使用它,并且我已经学习了有关gulp的大多数知识,并且想知道到底如何使用sourcemap,现在我可以放心使用它了。与一年前相比,大多数gulp插件现在都兼容。只是想说这很有意义!
Eric Bishard

@frosty 取消引用丑陋的代码。你能解释一下吗?.js.map文件是否不维护手工制作的文件与缩小的文件之间的关系(通常称为reference)?
Mohammed Zameer 2015年

1
@student它表示取消引用,因为我不想引用缩小的代码。它是缩小的,如果我看一下,它几乎一文不值。但是,如果它可以取消引用原始源的引用,那将是史诗般的。这就是源映射。希望对您有所帮助。
2013年

我喜欢这个答案(谢谢),但是有420个赞...我可以打破它吗?
埃里克·里德


31
  • 开发人员如何使用它?

我在评论中没有找到答案,这是可以使用的方法:

  1. 不要将您的js.map文件链接到index.html文件中(不需要这样做)
  2. 小型化工具(不错的工具)会在.min.js文件中添加注释:

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

这将连接您的.map文件。

min.jsjs.map文件准备就绪时...

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


2

只是增加了如何使用地图文件。我将chrome用于ubuntu,如果我去浏览源并单击一个文件,如果有地图文件,则会出现一条消息,告诉我可以查看原始文件以及如何执行此操作。

对于我今天使用的Angular文件,单击

Ctrl-P和原始文件列表在一个小窗口中显示。

然后,我可以浏览列表以查看我要检查的文件,并检查问题所在。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.