JavaScript SyntaxErrorスタックトレースの解析

バンドラーとランタイムからのJavaScript SyntaxErrorスタックトレースを解析。正確なエラー位置、予期しないトークンの詳細、モジュール解決パスを抽出します。

JavaScript

詳細な説明

JavaScript SyntaxErrorスタックトレースの理解

SyntaxErrorはJavaScriptエンジンが言語文法に準拠しないコードに遭遇した場合に発生します。ランタイムエラーとは異なり、SyntaxErrorはコードが実行される前のパース段階で検出されます。

一般的なSyntaxErrorスタックトレース

SyntaxError: Unexpected token '<'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)

SyntaxErrorの種類

  • Unexpected token --- 予期しない文字が見つかった(<},
  • Unexpected end of input --- ブロックが閉じられる前にファイルが終了
  • Unexpected identifier --- 予期しない場所に変数名が出現
  • Invalid or unexpected token --- コピー&ペーストからのスマートクォートなどの異常な文字

バンドラー vs ランタイムのSyntaxError

バンドルされたアプリケーション(Webpack、Vite、esbuild)では、SyntaxErrorはビルドステップ中に拡張メッセージ付きで表示され、ファイルパスと正確な位置を指すコードスニペットが含まれます。Node.jsからのランタイムSyntaxErrorはスタックトレースにモジュールローダーを表示しますが、正確なファイルの特定には役立ちにくい場合があります。

デバッグアプローチ

  1. エラーメッセージで具体的な予期しないトークンや文字を確認する
  2. 最初のアプリケーションフレームのファイルパスを確認する
  3. 正確な行と列番号でファイルを開く
  4. 一般的な問題を確認:閉じ括弧の欠落、余分なカンマ、コピー&ペーストの成果物、エンコーディングの問題
  5. 依存関係のエラーの場合、パッケージバージョンがNode.jsバージョンと互換性があるか確認する

ユースケース

SyntaxErrorは新しいコードを書く開発中に頻繁に発生しますが、不適切にバンドルされたコードを含むデプロイメント時、動的インポートが失敗した場合、またはサーバーレンダリングされたHTMLが誤ってJavaScriptとして提供された場合にも本番環境で表面化する可能性があります。

試してみる — Stack Trace Parser & Formatter

フルツールを開く