我有一个不是我写的很长的剧本。当我运行它时,我得到:
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
有没有更好的方法来获得至少一个行号?或任何提示?
使用node运行文件。如果有解析错误,它将报告它。
如果文件有效,那么node也会尝试运行它,如果你的脚本依赖于node环境中不可用的东西,这将失败。所以你必须忽略任何运行时错误。
例如,给定hello-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 的夜间构建,所以此时如果你想尝试这个,你需要编译你自己的 master 版本。
调试缩小文件
如果您正在使用缩小文件,通常行号不会很有帮助,并且通常调试未缩小文件不会给您解析错误。
为了解决这个问题,一旦你让 phantomjs 给你文件名,你就可以使用Esprima 的在线演示来获取 JavaScript 代码的实际解析:
http://esprima.org/demo/parse.html
从那里,您可以输入战略换行符以隔离实际错误。
对于此用例,Lint 工具不是最佳选择
像 jslint 或 jshint 这样的 lint 工具比真正的解析器更固执己见,所以如果您正在寻找一个非常具体的语法错误,我建议您使用真正的解析器,因为它只会检查代码的有效性,而不是固执己见的样式指南。我并不是说 lint 工具没有价值,只是它们对解决这类问题没有帮助。
您还可以使用语法 linter,例如 jslint 或 jshint
我SyntaxError: Parse error
在尝试require
自定义缩小 jquery 时收到。
我发现解决方案是在jquery.min.js
.
希望这可以帮助某人。使用 PhantomJS 1.9.7。
我使用一个简单的 shell 脚本,如果没有发现解析错误,它将正常运行 Phantom,否则会显示错误。它通过节点运行脚本,在输出中检查,SyntaxError
如果有错误,则将节点重新运行到终端。它将所有命令行参数传递给 Phantom。
如果您的节点解析器与您的 Phantom 解析器显着不同,则此方法的失败模式是。我的距离很近,从来都不是问题。
用法:./debug.sh --myArg1 val1 --myArg2 val2
调试.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 不支持的语法,因为我的页面在当前浏览器版本中正常工作。
我所做的是找出 PhantomJS 使用的 webkit 版本,对于 1.9.* 它在这里,34.534
.
现在我们必须在这里找到使用相同 webkit 或接近它的 Chromium 版本(对于 Mac)。
最终选择了Mac OSX 267668并安装了它。
加载了与 PhantomJS 相同的 URL,这是一个Uncaught SyntaxError: Unexpected token
具有完整堆栈跟踪的真实 URL。
希望有帮助。