Google chrome devtools 使用具有相对路径的sourceURL和sourceMappingURL
在Firefox和Chrome中,Google chrome devtools 使用具有相对路径的sourceURL和sourceMappingURL,google-chrome-devtools,source-maps,firefox-developer-tools,Google Chrome Devtools,Source Maps,Firefox Developer Tools,在Firefox和Chrome中,sourceURL的相对性似乎有所不同-当一些工具在JS文件中生成与放置文件相关的/#sourceURL=…字符串时,Firefox将URL视为与JS文件相关,而Chrome将其视为与原始HTML文件相关。哪一个是正确的,或者有更清晰的方式来说明这一点 在这个示例应用程序中,我尝试使用sourceURL将许多较小的文件合并到一个较大的文件中,但仍然允许浏览器知道应该调用哪个较小的文件,然后使用sourceMappingURL指定相对于原始文件的sourcema
sourceURL
的相对性似乎有所不同-当一些工具在JS文件中生成与放置文件相关的/#sourceURL=…
字符串时,Firefox将URL视为与JS文件相关,而Chrome将其视为与原始HTML文件相关。哪一个是正确的,或者有更清晰的方式来说明这一点
在这个示例应用程序中,我尝试使用
sourceURL
将许多较小的文件合并到一个较大的文件中,但仍然允许浏览器知道应该调用哪个较小的文件,然后使用sourceMappingURL
指定相对于原始文件的sourcemap文件
目录结构:
index.html
js/
all.js
uncompiled/
app.js
app.js.map
app.min.js
index.html
是加载js/all.js
或js/uncompiled/app.min.js
的最小页面。在JS/all.JS
中没有其他JS(因为这是一个最小的示例),但理论上这里可能有很多。该文件的目的只是将各种缩小的JS文件组合成一个更大的文件,但仍然允许开发人员查看原始代码,并相应地设置断点
app.js的内容
:
class应用程序{
建造师(姓名){
this.name=名称;
}
(){
window.alert(“Hello”+this.name);
}
}
新应用程序(“科林”).sayHi();
然后,运行一个简单的minifier,使用匹配的app.js.map
文件将其重建为app.min.js
:
var-App=function(a){this.name=a};App.prototype.sayHi=function(){window.alert(“Hello”+this.name)};(新应用程序(“科林”)).sayHi();
//#sourceMappingURL=app.js.map
最后,将缩小的输出包装在eval中,并将sourceURL
参数添加到末尾(为了可读性增加了换行符):
如果
index.html
直接指向js/uncompiled/app.min.js
,那么Firefox和Chrome都正确理解app.js.map位于同一目录中,并且应该在调试时使用。但是,如果index.html
指向js/all.js
,那么当两个浏览器都正确地显示单个文件中的eval
'd内容时,只有Firefox会创建相对于all.js
的路径
在此结构上使用python-mhttp.server
可以在firefox中显示以下结果:
127.0.0.1 - - [14/Jun/2019 08:33:37] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:33:37] "GET /js/all.js HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:33:38] code 404, message File not found
127.0.0.1 - - [14/Jun/2019 08:33:38] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [14/Jun/2019 08:33:41] "GET /js/uncompiled/app.js.map HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:33:41] "GET /js/uncompiled/app.js HTTP/1.1" 200 -
另一方面,Chrome的尝试如下:
127.0.0.1 - - [14/Jun/2019 08:34:22] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:34:22] "GET /js/all.js HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:34:22] code 404, message File not found
127.0.0.1 - - [14/Jun/2019 08:34:22] "GET /uncompiled/app.js.map HTTP/1.1" 404 -
127.0.0.1 - - [14/Jun/2019 08:34:23] code 404, message File not found
127.0.0.1 - - [14/Jun/2019 08:34:23] "GET /favicon.ico HTTP/1.1" 404 -
Chrome似乎假设js/app.js
中的sourceURL
是相对于index.html
,而Firefox(从我的角度来看,这是正确的)将其解释为相对于app.js
。我建议Firefox是正确的,因为它允许任何HTML文件在任何路径包含该JS,并且仍然正确加载了sourcemaps
示例源,包括位于不同相对路径的两个html文件:来自规范(或位于的副本):
如果源映射URL不是绝对的,那么它是相对于生成代码的“源源源”的。源原点由以下情况之一确定:
- 如果生成的源代码未与具有“src”属性的脚本元素关联,并且生成的代码中存在
注释,则应使用该注释确定源代码的来源。注意:之前,这是“/@sourceURL”,与“//@sourceMappingURL”一样,两者都接受是合理的,但是/#是首选/#sourceURL
- 如果生成的代码与脚本元素关联,并且脚本元素具有“src”属性,则脚本元素的“src”属性将是源代码
- 如果生成的代码与脚本元素相关联,并且脚本元素没有“src”属性,则源源代码将是页面的源代码
- 如果使用
函数或通过eval()
将生成的代码计算为字符串,则源代码将是页面的原点new function()
js/all.js
的情况下,它属于最后一种情况:源原点将是页面的原点。因此,Chrome似乎遵循了规范,尽管这可能看起来有悖常理。来自规范(或位于的副本):
如果源映射URL不是绝对的,那么它是相对于生成代码的“源源源”的。源原点由以下情况之一确定:
- 如果生成的源代码未与具有“src”属性的脚本元素关联,并且生成的代码中存在
注释,则应使用该注释确定源代码的来源。注意:之前,这是“/@sourceURL”,与“//@sourceMappingURL”一样,两者都接受是合理的,但是/#是首选/#sourceURL
- 如果生成的代码与脚本元素关联,并且脚本元素具有“src”属性,则脚本元素的“src”属性将是源代码
- 如果生成的代码与脚本元素相关联,并且脚本元素没有“src”属性,则源源代码将是页面的源代码
- 如果使用
函数或通过eval()
将生成的代码计算为字符串,则源代码将是页面的原点new function()
js/all.js
的情况下,它属于最后一种情况:源原点将是页面的原点。因此,Chrome似乎遵循了规范,尽管这可能看起来有悖常理。没错,我更关注的是“这有什么用”,即“规范实际上规定了什么”——这不是浏览器规范第一次被定义为ambig
127.0.0.1 - - [14/Jun/2019 08:33:37] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:33:37] "GET /js/all.js HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:33:38] code 404, message File not found
127.0.0.1 - - [14/Jun/2019 08:33:38] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [14/Jun/2019 08:33:41] "GET /js/uncompiled/app.js.map HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:33:41] "GET /js/uncompiled/app.js HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:34:22] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:34:22] "GET /js/all.js HTTP/1.1" 200 -
127.0.0.1 - - [14/Jun/2019 08:34:22] code 404, message File not found
127.0.0.1 - - [14/Jun/2019 08:34:22] "GET /uncompiled/app.js.map HTTP/1.1" 404 -
127.0.0.1 - - [14/Jun/2019 08:34:23] code 404, message File not found
127.0.0.1 - - [14/Jun/2019 08:34:23] "GET /favicon.ico HTTP/1.1" 404 -