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

npm ENOENT:package.jsonを作る前に失敗したパスを確かめる

正確なエラーパスと呼び出し元ディレクトリを残し、欠落したチェックアウト、ルート、workspace、起動設定を切り分けます。空のマニフェストは復旧の証明になりません。

オリジナル概念図:正確な欠落パス、呼び出し元、リポジトリのマニフェスト、対象を保存して元の処理を確認。顧客ログではなく解説図です。
オリジナル概念図:正確な欠落パス、呼び出し元、リポジトリのマニフェスト、対象を保存して元の処理を確認。顧客ログではなく解説図です。 Watch at Ease

npmがpackage.jsonのENOENTを報告したら、まず開こうとしたパスを残します。パス要素の欠落は、誤ったディレクトリ、不完全なチェックアウト、別パッケージの選択などで起きます。メッセージだけでは修復方法を選べません。

隔離したNode v24.19.0/npm 11.9.0の対照では、ルートとworkspaceのスクリプト、追跡済みだが欠落したファイル、無関係な空マニフェストを区別し、10項目が通りました。これはパスから確認する手順の例であり、過去のWindows --prefix問題の再現や、インストール・CIビルド成功の保証ではありません。

失敗パスと呼び出し元を保存

編集前にcode、syscall、path、コマンド全体をコピーし、呼び出し元の開始ディレクトリ、Node/npm版、npmを起動するIDEタスク・CIステップ・サービスを記録します。ドライブ文字、コンテナパス、シンボリックリンクの状況を残し、公開用コピーでのみ私的なパスを伏せます。

ログを意図したリポジトリ・パッケージと照合します。npmスクリプトの作業ディレクトリは最初の呼び出し元と異なり得ます。明示prefixの対照ではルートパッケージ内で実行され、INIT_CWDは親ディレクトリを保持しました。スクリプトのcwdだけでは元コマンドの開始位置を復元できません。

作成前にマニフェストの所在を確認

確認済みリポジトリルートで、追跡中のpackage.json、選択コミット、実際の作業ファイルをエラーパスと比較します。Gitならルートでgit ls-files -- package.json ':(glob)**/package.json'を使い、ルートと入れ子の追跡パスを列挙できます。これはインデックスの証拠であり、現在のファイル存在や期待したバイト列の証明ではありません。

現在のチェックアウトや成果物に含まれるべきファイルなら、ローカル変更を保全してプロジェクトの通常手順で復元します。今回のエラーを消すだけのnpm initは避けます。自作対照では作業ファイルを消してもGitはpackage.jsonを列挙し、元のバイト列を戻すと意図したスクリプトが動きました。

ルートか実在するworkspaceを選択

ルートのworkspaces設定と関連する子マニフェストを読みます。workspace選択には宣言パッケージ名やパスを使え、フォルダの末尾名がパッケージ名とは限りません。npm v11ガイドは、workspace内で開始するとその実行文脈が選ばれ、prefixがworkspaceルートになると説明しています。

対照のルートはpackages/aを宣言し、子マニフェストのnameはfixture-aでした。npm run probe --workspace=fixture-aも子内でのprobe実行も子スクリプトを選びました。推測した--workspace=aはENOENTではなくNo workspaces foundです。新しいエラーは別分岐として保存し、欠落ファイルの診断へ無理に当てはめません。

起動経路と版の範囲を比較

許可された小さな再現で、元の起動元と、確認済みパッケージへの直接移動、明示workspace、元のprefix経路を比較します。開始ディレクトリと実行時ディレクトリを表示し、公開されるなら解決マニフェストも残します。経路を一つずつ変え、比較中にキャッシュやマニフェストを置き換えません。

公開npm issue7722には、特定の古い版によるWindows --prefix install失敗とcd・ciの回避報告があります。not plannedで閉じたことは全該当版の修正を保証しません。Linux/npm11.9.0の--prefix project run probeは成功しましたが、スクリプト対照であり、Windows npm install、依存解決、本番回帰の試験ではありません。

証明した原因だけを修復

誤ったディレクトリなら対象パッケージへ、追跡ファイル欠落ならチェックアウトや成果物を修復します。起動元cwdはタスクへ明示し、workspace選択の誤りは確認済みの名前・パスを使います。版依存の疑いなら最小再現を保存し、範囲を限定した版・回避策を決めます。古い報告を全ENOENTへ適用しません。

空ディレクトリと追跡ファイル欠落の対照はいずれも正確なpackage.json欠落パスを示しました。空ディレクトリに{}を置くとパスは読めましたがMissing script: probeになり、元のスクリプトや依存は戻りません。エラー一つの消失は、意図したプロジェクトの復旧より弱い結果です。

元のワークフローの成功を要求

元の起動元へ戻り、意図した版とworkspaceで元のinstall、ci、スクリプト処理を実行します。呼び出し元ディレクトリ、マニフェスト識別、終了状態、期待出力やプロジェクト検証を保存します。別コマンドの成功は比較材料であり、失敗した元の処理の完了とは限りません。

10項目はLinux、Node v24.19.0、npm11.9.0上の新規ローカル対照のみです。制御したprobeと追跡ファイル確認を実行し、依存インストールやネットワークは使いませんでした。Windows、IDE、CIサービス、非公開リポジトリ、過去の--prefix回帰は再現していません。リンク先v11文書はLegacyの版別資料で、最新CLIの主張ではありません。

オリジナル概念図:誤ったディレクトリ、不完全なチェックアウト、workspace対象、再現済みツール回帰には別々の証拠と処理が必要です。
オリジナル概念図:誤ったディレクトリ、不完全なチェックアウト、workspace対象、再現済みツール回帰には別々の証拠と処理が必要です。 Watch at Ease