从phantomjs获取更多信息"SyntaxError:Parse error"消息

gcb*_*gcb 53 phantomjs

我有一个很长的脚本,不是我写的.当我运行它时,我得到:

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工具没有价值,只是说它们不会对解决这类问题有所帮助.

  • 1.9.8仍然只有语法错误::并且在新的2.0脚本中随机挂起,所以只需按Ctrl + Z;) (2认同)