Getting more information from “SyntaxError: Parse error” message in PhantomJS/CasperJS

Getting more information from “SyntaxError: Parse error” message in PhantomJS/CasperJS

我有一个很长的 CasperJS 脚本。当我 运行 我得到:

幻影 file.js
SyntaxError: 解析错误

有没有办法获得有关该错误的更多信息。 至少一个行号?或者任何提示?

PhantomJS 本身无法确定这一点。 phantom.onError 上的文档说:

This is the closest it gets to having a global error handler in PhantomJS

并且这不会捕获语法错误。如果您尝试使用 --debug=true 选项 运行 它,您会看到很多调试消息,但最终错误的信息量仍然相同。

我尝试的另一件事是使用第二个 PhantomJS 脚本读取原始脚本并尝试 eval 它。 phantom.onError 事件在这种情况下被触发,但 trace 参数为空。

好处是 PhantomJS/CasperJS 脚本只是 JavaScript,因此您可以将它们粘贴到 http://jslint.com/ 或 运行 上的专用 jslinter 以查看它们在哪里问题所在。您必须在网站上标记一些选项,否则会出现很多错误:

  • phantom添加到全局变量框,
  • 启用node.js模式和
  • 容忍"everything"(或者那些你真正想容忍的事情)

尝试 运行 节点的 file.js,因此对于您的示例:

node file.js

我花了整整 8 个小时来找到解决这个问题的技巧。诀窍是 运行 "phantomjs" 并键入 'require "path_to_js_file"'。我使用的是 2.1.1 版本的 phantomjs。可能 2.2 也有效。

然后会有一个堆栈跟踪显示哪一行是违规者。你不会在测试输出中看到这个。

在我的例子中,如果你为一个对象定义了两次 属性,它将适用于 chrome、firefox 等,但不适用于 phantomjs。 Lint 可能会有所帮助,但我从事的项目存在 >5K 的 lint 错误,几乎不可能看出问题所在。此外,特定问题可能隐藏在 "javascript strict mode violation" 的同一个桶下。 Nodejs 也没有抱怨这个。