我有一个不是我写的很长的脚本。 当我运行它,我得到:
phantomjs file.js
SyntaxError: Parse error
我检查了手动和--help,我可以最好想出为:
phantomjs --debug=yes file.js
(irrelevant debug statement from CookieJar)
SyntaxError: Parse error
有没有更好的方式来获得至少一个行号? 或任何暗示呢?
我有一个不是我写的很长的脚本。 当我运行它,我得到:
phantomjs file.js
SyntaxError: Parse error
我检查了手动和--help,我可以最好想出为:
phantomjs --debug=yes file.js
(irrelevant debug statement from CookieJar)
SyntaxError: Parse error
有没有更好的方式来获得至少一个行号? 或任何暗示呢?
运行与节点的文件。 如果有语法错误,它会报告。
如果该文件是有效的,那么节点也将尝试运行它,如果你的脚本取决于您的节点环境中没有的东西,这将失败。 所以你必须忽略任何运行时错误。
例如,给你好,world.js:
// Say Hello World twice
for (var i=0; i<2; i++) {
console.log("Hello World") );
}
与节点运行:
node hello-world.js
输出:
/home/someone/somewhere/hello-world.js:3
console.log("Hello World") );
^
SyntaxError: Unexpected token )
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
你file.js
包含无效的语法。 你应该有一个语法验证检查。 我已经创建了一个在线工具,可以是一个可能的解决方案,退房http://esprima.org/demo/validate.html 。
充分利用PhantomJS更多信息
PhantomJS的下一个版本(想必这将是1.9.8,1.9.7以后无论发生什么事),这样会输出错误:
SyntaxError: Parse error
http://localhost:9000/scripts/49e8b4f4.vendor.js:8
所以,这略高于当前消息更加有用。
不幸的是,没有每晚构建了PhantomJS,所以在这个时候你就需要自己编译主版本,如果你想试试这个。
调试精缩文件
如果您正在使用的缩小文件的工作,往往行数量不会有很大的帮助,而且经常调试未过压缩文件,不会给你解析错误。
为了解决这个问题,一旦你phantomjs给你的文件的名称,你可以使用Esprima的在线演示让你的JavaScript代码的实际解析:
http://esprima.org/demo/parse.html
从那里,你可以进入战略换行符隔离实际的错误。
林特工具是次优的这个用例
喜欢的JSLint或jshint棉绒工具是比真正的解析器更加固执己见,所以如果你正在寻找一个非常特殊的语法错误,我会建议使用一个真正的解析器,因为它只会检查代码的有效性,而不是自以为是的造型指导。 我没有暗示皮棉工具没有价值,只是他们不会为解决这类问题的帮助。
您还可以使用语法棉短绒喜欢的JSLint或jshint
我收到的SyntaxError: Parse error
,而试图require
定制的精缩jQuery的。
我找到了解决方案是一个空白行添加到底部jquery.min.js
。
希望这可以帮助别人。 使用PhantomJS 1.9.7。
我用一个简单的shell脚本,将正常运行幻影如果未发现解析错误,否则将显示错误。 它通过节点运行脚本,用于检查SyntaxError
输出,然后重新运行节点是否有错误的终端。 它通过了所有命令行参数一起幻影。
这种方法失效模式是如果你的节点解析器是从你的幻影解析器显著不同。 矿井足够接近,它的从来就不是一个问题。
用法: ./debug.sh --myArg1 val1 --myArg2 val2
debug.sh:
ERROR=$(node myscript.js 2>&1 >/dev/null | grep "SyntaxError")
if [ "$ERROR" = "" ]; then
echo "No parse errors, running script..."
# run the script with Phantom and pass all the args to it
phantomjs accession.js $*
else
echo "*********************************************************"
echo "********* There are parse errors in the script: *********"
echo "*********************************************************"
# show the errors by running again but not redirecting
node accession.js
fi
我也有同样的问题,但没有解决方案,为我工作。
我想,这个问题可能是由PhantomJS的WebKit不支持的语法,因为我的网页是在当前浏览器的版本正常工作。
我所做的就是找出其中的WebKit版本PhantomJS使用,为1.9。*这是在这里 , 34.534
。
现在我们使用相同的WebKit,或接近它,在找到铬版这里 (适用于Mac)。
结束了与该会的Mac OSX 267668并安装它。
加载相同的URL PhantomJS,在这里它是,一个真正的Uncaught SyntaxError: Unexpected token
一个完整的堆栈跟踪。
希望帮助。