私が書いたのではない長いスクリプトがあります。実行すると次のようになります:
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で実行します:
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
に無効な構文が含まれています。構文検証ツールで確認する必要があります。私が作成したオンラインツールは、可能な解決策の1つです。 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などのlintツールは実際のパーサーよりも意見が多いため、非常に具体的な構文エラーを探している場合は、コードの妥当性のみをチェックし、意見のあるスタイルガイドラインはチェックしないため、実際のパーサーの使用をお勧めします。リントツールに価値がないことを意味するのではなく、この種の問題を解決するのに役立たないというだけです。
Jslintやjshintなどの構文リンターを使用することもできます
私は同じ問題を抱えていましたが、解決策はありませんでした。
私のページは現在のブラウザのバージョンで正しく機能していたため、この問題はおそらくPhantomJSのWebキットでサポートされていない構文であると考えました。
私がやったことは、PhantomJSが使用しているWebkitバージョンを見つけることでした。1.9。*では here 、34.534
。
ここで、同じWebkitを使用して、またはそれに近いChromiumバージョンを here (Macの場合)で見つける必要があります。
Mac OSX 267668 を使用してインストールしました。
PhantomJSと同じURLをロードしましたが、ここでは実際のUncaught SyntaxError: Unexpected token
完全なスタックトレース。
お役に立てば幸いです。
解析エラーが見つからない場合は通常Phantomを実行する単純なシェルスクリプトを使用します。そうしないと、エラーが表示されます。ノードを介してスクリプトを実行し、出力でSyntaxError
をチェックしてから、エラーがある場合はターミナルに対してノードを再実行します。すべてのコマンドライン引数をPhantomに渡します。
このメソッドの失敗モードは、ノードパーサーがPhantomパーサーと大きく異なる場合です。鉱山は十分に近いので、決して問題にはなりません。
使用法: ./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
カスタムミニファイされたjqueryをrequire
しようとしてSyntaxError: Parse error
を受け取りました。
解決策は空白行を追加するjquery.min.js
の下部にあることがわかりました。
これが誰かの助けになることを願っています。 PhantomJS 1.9.7を使用します。