我有一个很长的脚本,不是我写的.当我运行它时,我得到:
phantomjs file.js
SyntaxError: Parse error
Run Code Online (Sandbox Code Playgroud)
我检查了手册和--help,我能想到的最好的是:
phantomjs --debug=yes file.js
(irrelevant debug statement from CookieJar)
SyntaxError: Parse error
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来获得至少一个行号?或任何暗示?
Phi*_*ell 82
使用节点运行该文件.如果存在解析错误,它将报告它.
如果文件有效,那么节点也会尝试运行它,如果您的脚本依赖于节点环境中不可用的内容,则会失败.所以你必须忽略任何运行时错误.
例如,给定hello-world.js:
// Say Hello World twice
for (var i=0; i<2; i++) {
console.log("Hello World") );
}
Run Code Online (Sandbox Code Playgroud)
用节点运行它:
node hello-world.js
Run Code Online (Sandbox Code Playgroud)
输出:
/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
Run Code Online (Sandbox Code Playgroud)
Ari*_*yat 12
您file.js的语法无效.您应该使用语法验证器进行检查.我创建的在线工具可以是一种可能的解决方案,请查看http://esprima.org/demo/validate.html.
JBC*_*BCP 10
从PhantomJS获取更多信息
PhantomJS的下一个版本(可能是1.9.8,无论是1.9.7之后的版本)都会输出如下错误:
SyntaxError: Parse error
http://localhost:9000/scripts/49e8b4f4.vendor.js:8
Run Code Online (Sandbox Code Playgroud)
所以这比当前消息更有用.
不幸的是,PhantomJS没有每晚构建,所以此时你需要编译自己的master版本,如果你想尝试这个.
调试缩小的文件
如果您正在使用缩小的文件,通常行号将不会非常有用,并且通常调试未缩小的文件将不会给您解析错误.
要解决这个问题,一旦你得到phantomjs给你文件的名称,你可以使用Esprima的在线演示来获得JavaScript代码的实际解析:
http://esprima.org/demo/parse.html
从那里,您可以输入策略性换行符以隔离实际错误.
对于这种用例,Lint工具是次优的
像jslint或jshint这样的lint工具比真正的解析器更有见解,所以如果你正在寻找一个非常具体的语法错误,我建议使用一个真正的解析器,因为它只会检查代码的有效性,而不是固定的样式指南.我并不是说lint工具没有价值,只是说它们不会对解决这类问题有所帮助.
| 归档时间: |
|
| 查看次数: |
33355 次 |
| 最近记录: |