这已经发生了第二次,正如您可以想象的那样,显示错误信息的调试器是调试时可能发生的最糟糕的事情。当使用源映射时,调试器认为VM处于某一行,但实际上它还没有存在,或者更糟糕的是,永远不会到达这一行。使用Grunt uglify插件生成源映射,该插件使用UglifyJS2。
一个例子:
if(something === 1){
console.log("it's something"); // debugger thinks the VM is here
else{
console.log("no it's not"); // while actually it's here
}
然后打印no it's not
,但调试器跳转到if
我遇到的另一个例子是:
var that = this;
some.functionCall(1, function(){
console.log(that); //this is where the debugger thinks the vm is
// debugger: that = undefined
// console prints nothing to that point
});
当我继续该计划时,console.log(that)
最终确实开火了。
其他人是否遇到过同样的问题?它更可能是UglifyJS2或Google Chrome的问题吗?
Chrome版本:38.0.2125.8 dev(64位)
Uglify2JS:2.4.0
grunt-contrib-uglify:0.5.1
答案 0 :(得分:1)
我发现了类似的问题。偏移量与注释行数完全相同。
编辑根本原因是在第三方库中出现了以//>>
为前缀的行。每条这样的线都会产生1行偏移。它们似乎是一些折旧的requirejs构建编译指示。
对我们来说,解决方案是在构建时在代码中找到并替换它们,因为我们在构建系统中不使用pragma。
sed -i -e 's_//>>_// pragma was here: _g' `find . -type f -name "*.js"`