テクノロジー · 実用ガイド

Node の ERR_REQUIRE_ESM?モジュール設定を変える前に実行時の呼び出し元を追跡

ソースが import でも、出力 JavaScript、依存関係、テストランナーが require() を呼ぶ場合があります。実行時境界を証明してから、ESM 移行、動的 import、審査済みの一時固定を選びます。

ソースから出力、パッケージ情報、Node 実行時を追跡するオリジナル技術イラスト。
オリジナルイラスト:設定変更前に実行経路を追跡します。 Watch at Ease

ERR_REQUIRE_ESM は実行時の形式境界を示します。TypeScript、Babel、Vite、Electron、Jest、推移依存が require() を生成するため、実行行はソースと違うことがあります。

最初のスタック、Node 版、実行された JavaScript を保存してから package.json を変更します。

実行時証拠を固定する

スタック、コマンド、作業ディレクトリ、Node とパッケージマネージャー、lockfile を保存し、対象 ESM と最初の外部でない呼び出し元を示します。

node_modules や lockfile を先に削除すると、失敗した依存グラフを失います。

実際の出力を調べる

dist、out、build、Electron bundle の該当行が require() か確認します。

TypeScript の module、moduleResolution、拡張子、最寄りの package.json type を記録します。

境界と依存所有者を特定

lockfile と依存ツリーで版を確定し、自社、直接依存、推移依存のどこが CommonJS 呼び出しを所有するか確認します。

Node 版も保存します。ランタイム回帰やトップレベル await は ESM-only 更新と別問題です。

一つの修復経路を選ぶ

移行可能なら境界、出力、相対拡張子、入口を一緒に直します。CommonJS を維持するなら非同期化できる所有境界に dynamic import を置きます。

依存内部なら対応上流版を優先し、一時固定には理由、リスク、解除日を記録します。

同じ境界で検証

古い出力を消して再構築し、lockfile を勝手に変えず、require が消えたか正しい export が返るか確認します。

同じ Node 版で元のコマンド、テスト、本番入口を実行し、依存ツリーと出力断片を保存します。

三つの修復経路が検証結果へ合流するオリジナル技術イラスト。
オリジナルイラスト:境界を証明してから移行、橋渡し、固定を選びます。 Watch at Ease