Closure compiler source map = empty (Chrome) 或错误的 (Firefox) 代码 window

Closure compiler source map = empty (Chrome) or wrong (Firefox) code window

我在'src'文件夹中有一组JavaScript文件,由Closure Compiler编译成一个文件cw-around.js 在 'src/comp' 中生成源地图 cw-around.js.map 也在 ' src/comp'.

"//#sourceMappingURL=xxx"在编译文件的末尾cw-around.js。 xxx 是一个完整的 HTTP link(本地网络服务器)到 cw-around.js.map 并在浏览器中成功测试。 {"version":3,"file":"cw-around.js"是cw-around.js.map文件的开头

在Dev mode/sources文件列表中,我可以看到Chrome和Firefox中的关联文件(当我输入错误的xxx时,我只能看到已编译的cw -around.js 文件).

在那里,当我双击一个关联文件时(cw-demodata.js,其中一个 JavaScript 文件名包含在已编译的文件中文件):

  1. 在Chrome58或61("JavaScript source maps enabled"+"source map detected"),空显示代码 window

  2. 在 Firefox 54 ("show original sources" + "devtools.source-map.locations.enabled;true"), HTML 的代码显示我的调用网页

怎么了?如何调查以确定问题所在?

我找到了解决问题的方法:编译js文件并在与js文件相同的目录中生成源映射。关联的 js 文件现在可以在 Chrome 和 Firefox 中正确显示。

之前,成功打开编译后的js文件和source map后,浏览器似乎无法找到并加载未编译的js文件。 如果能在控制台中显示错误消息以快速发现问题,那就太好了...

我刚刚遇到了同样的问题,它来自 sourceMapLocationMappings 未正确设置。在源映射中,有(在 "version""file" 旁边)一个 "sources": [] 条目,告诉浏览器在哪里可以找到实际的源文件(不是源映射)。

因为我和你一样,从子文件夹编译资产,子文件夹路径在这个源数组中(即它是 "sources": ["src/comp/foo.js"] 而不是 "sources": ["foo.js"])。浏览器试图从我的网络服务器请求 src/comp/foo.js,但它显然不在那里,因为 foo.js 直接在那里。

解决这个问题的方法是设置适当的 sourceMapLocationMappings。使用闭包编译器 cli,您可以使用 --source_map_location_mapping "\"src/comp/foo.js^|foo.js\"". Using the ant task, you add a sourceMapLocaionMapping="src/comp/foo.js|foo.js" 对任务调用执行此操作。

这会将 "sources" 调整为直接指向 ["foo.js"],然后由您的网络服务器提供服务,并且可以通过开发工具找到。

编辑:根据

--source_map_location_mapping 中添加双引号