プロジェクトにEcmascript 2015を使用しようとしていますが、特定の場所(ブレークポイントがあると論理的に考えた場所)にブレークポイントを追加するのは難しいと感じています。
chromeに#enable-javascript-harmonyフラグがtrueに設定されている場合(それが役立つ場合)、babeljsを使用して変換し、ソースマップを使用してデバッグするファイルにブレークポイントを直接設定します。私は何か間違ったことをしていることを最も確信していますが、誰かが私が間違っている場所を指し示すことができます。
参考のため、私が話している内容のGIFを追加しました。
問題は、ソースコード(ソースマップ経由)と実際のコードマッピングの関係です。ソースは簡潔で高密度ですが、生成されるコードは通常より長く、2つの間のマッピングは、2つの間の1:1の関係を保証する方法では行われません(おそらく不可能です)。
したがって、(foo) => bar
などの単一行ステートメントにブレークポイントを配置しようとすると、 実際に実行されたコード は少なくとも数行の長さであり、私は推測します(実際にはわかりません! )devtoolsは、実際の実行中のコードの最初の行に単純に実際のブレークポイントを配置しようとします。 -これは式では失敗します。
これは、生成されたコードの固有の欠点であり、ソースマップを使用するすべてのjsへのコンパイル言語に適用されます。残念ながら、私は良い回避策を知りません。これらの場合の最後の手段として、ブラウザでソースマップをオフにして、生成された実際のコードをステップスルーします。
それが役立つことを願っています:/
ここのすべての指示に従いましたか?
https://developer.chrome.com/devtools/docs/javascript-debugging#source-maps
また、ハーモニーフラグセットを有効にしている場合、babeljsを使用してトランスパイルする必要はありません。ChromeはES6/2015または少なくともサポートしているサブセットを理解します...すべて一緒にソースマップ?
Chromeではエラーのようです。
カナリアで修正されました: https://bugs.chromium.org/p/chromium/issues/detail?id=611328#c21
問題が解決しない場合、githubで大きな議論が行われます。 https://github.com/webpack/webpack/issues/2145
通常、私は単にソースマップを非難しますが、ここで示していることから、デバッグをchromeとjavascriptデバッガーステートメントと比較することから結論を導き出しています。
したがって、デバッガーステートメントを関数パラメーター領域内に配置できないことがわかっています。
これは、記録された例でよく起こります。
.then(debugger)
そこでブレークできるようにするには、さらにコードを追加する必要があります。
.then((whatever) => {
// We need an existing empty line here.
return whatever
})
また、ソースマップをオフにすることも良い考えであり、コードを1行ずつステップスルーします。
約束の流れの近くで、または約束の流れの中で一時停止したいことがわかります。 この警告を覚えておいてください。複雑なアプリで非同期コードを一時停止すると、競合状態が発生し、さらに多くの予期しない動作が発生する可能性があります。