npm error code ENOENT の原因と対処
npm error code ENOENT の核心は、npmが使おうとしたパスにファイルまたはディレクトリが存在しないことです。ENOENTは 慣用的に "Error NO ENTry" と読まれるOS由来のエラーコードで、Node.jsではNo such file or directory と説明されます。まずエラー内のsyscallとpathを読み、何が無いのかを特定します。
ENOENT means that no file or directory exists at the requested path. Read the reported path and syscall before reinstalling anything; they identify what npm or Node.js tried to access.
TL;DR
pathがpackage.jsonなら、現在地とプロジェクトルートを確認するscriptsが参照するファイルなら、相対パスの基準とファイル名を確認するnode_modules内の欠落なら、依存関係を再構築してnpm cache verifyを実行する- Windowsでは長いパス、未引用の空白入りパス、OneDriveのローカル状態を確認する
- workspacesではルートの設定と対象workspaceの実パスを照合する
1. エラーの読み方 / Read the missing path
npm error code ENOENT
npm error syscall open
npm error path C:/work/my-app/package.json
npm error errno -4058
npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open 'C:/work/my-app/package.json'
npm error enoent This is related to npm not being able to find a file.npm 11.11.0を使い、空のディレクトリでnpm installを実行して上記と同じ構造の 文言を確認しました。表示上のパスは短縮しています。重要なのはopenしようとしたpackage.jsonが無いという点で、キャッシュ削除では解決しません。
2. 原因別の切り分け / Diagnose by cause
(a) package.jsonが無いディレクトリでnpm installを実行した
代表的な文言は次の通りです。
npm error code ENOENT
npm error syscall open
npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open 'C:/work/my-app/package.json'pwdまたはcdで現在地を確認し、package.jsonがある プロジェクトルートへ移動してから実行します。新規プロジェクトの場合だけ、作成先を確認してnpm initを使います。既存プロジェクトで不用意に初期化すると別のpackage.jsonを作るため避けてください。
cd C:/work/my-app
npm install(b) package.jsonのmainまたはscriptsが存在しないファイルを指している
scriptsから起動した処理が設定ファイル等を開く場合、次のようなENOENTになります。
Error: ENOENT: no such file or directory, open 'C:/work/my-app/config/local.json'
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'C:/work/my-app/config/local.json'package.jsonのmainとscriptsを確認し、ファイル名の大小文字、 ビルド前後の出力先、相対パスの基準を実ファイルと合わせます。npm scriptsはパッケージのルートを 作業ディレクトリとして実行されます。mainはパッケージを読み込む側に示す入口で、npm startが自動で実行する項目ではありません。なお、"start": "node missing-entry.js"のように Node.jsの起動ファイル自体が無いケースを実測すると、Node.js 24.14.1ではMODULE_NOT_FOUNDでした。すべてのファイル欠落がENOENTになるわけではありません。
(c) キャッシュ破損またはnode_modulesの不整合
エラーのpathがnode_modules配下で、インストール中断後などに実ファイルが 欠けている場合は依存関係を再構築します。次はロックファイルも作り直す手順なので、Gitの差分を 確認できる状態で実行してください。
rm -rf node_modules package-lock.json
npm install
npm cache verifyWindows PowerShellでは次のように実行できます。
Remove-Item -Recurse -Force node_modules
Remove-Item -Force package-lock.json
npm install
npm cache verifynpmのキャッシュは内容を整合性検証する設計で、npm cache verifyは不要データの回収と インデックス・保存データの検証を行います。npm cache clean --forceの常用は不要です。pathがプロジェクト直下を指す場合は、この再構築をしても原因は直りません。
(d) Windows特有のパス・OneDriveの問題
Error: ENOENT: no such file or directory, lstat 'C:/Users/user/OneDrive/project/node_modules/example/file.js'- 長いパス: 深い
node_modulesと長い親フォルダ名が重なる場合は、 リポジトリをC:/src/appのような短い場所へ移して再確認します。Windowsの長いパス対応は OS設定とアプリ側の対応の両方に依存し、環境によってはENAMETOOLONG等の別コードにもなります。 - 日本語・空白: それ自体は有効なパスです。npm scriptや外部ツールがパスを 正しく引用していない場合に別のパスとして解釈されるため、短い英数字だけの場所へ移して差を確認し、 原因となったスクリプト側の引用を直します。
- OneDrive: Files On-Demandでオンラインのみのファイルは、オフライン時に開けません。 同期状態を確認し、プロジェクトを「このデバイス上で常に保持する」にするか、同期対象外のローカル ディレクトリへ移します。
(e) モノレポまたはworkspacesのパスが誤っている
npm error code ENOENT
npm error syscall open
npm error path C:/work/monorepo/packages/api/package.json
npm error enoent Could not read package.jsonルートpackage.jsonのworkspacesに書いたパスと、実際のディレクトリ構成を 照合します。workspace名とフォルダ名が同じとは限らないため、対象を名前で指定する場合は各package.jsonのnameも確認します。
npm install
npm run build --workspace=apiルートから実行するのか、対象workspace内で実行するのかを統一してください。存在しないpackages/apiをworkspacesに残している場合は設定を直し、移動したパッケージへのfile:依存も新しい相対パスへ更新します。
3. npmのENOENTとNode.jsのENOENTの違い
| 表示 | 発生元 | 最初に見る場所 |
|---|---|---|
npm error code ENOENT | npm CLIが必要なファイルを開けず、OSエラーを報告 | npm出力のpathと現在地 |
Error: ENOENT, no such file or directory | 自分のNode.jsコードが呼んだfs系API等 | スタックトレースとコード内のパス指定 |
後者ではnpmの再インストールより先に、自分のコードがfs.readFile、fs.open、fs.stat等へ渡したパスを確認します。相対パスならprocess.cwd()から解決されるのか、モジュールファイルの位置から組み立てるのかを 明示すると再発を防げます。
4. 最短の確認順 / Diagnostic order
- エラーの
syscallとpathを読む - そのパスが実際に存在するか確認する
package.json、scripts、workspacesの設定と実ディレクトリを照合するnode_modules配下の欠落だけなら依存関係を再構築する- Windowsでは短いローカルパスへ移して環境依存かを切り分ける
依存パッケージのファイル欠落ではなく、バージョン競合でERESOLVE unable to resolve dependency treeが出ている場合は別問題です。npm ERESOLVEエラーの原因と解決を参照してください。
5. English summary
ENOENT is an operating-system error meaning that no file or directory exists at the requested path. For npm error code ENOENT, inspect npm's reportedpath and syscall: common causes are running npm outside the project root, a bad script or workspace path, an incomplete node_modules tree, or a Windows path or OneDrive availability issue. A direct Node.jsError: ENOENT, no such file or directory usually comes from an fsoperation in your code, so inspect the stack trace and the path your code supplied.
よくある質問 / FAQ
- npm error code ENOENT とはどういう意味?
- ENOENTは、指定したパスにファイルまたはディレクトリが存在しないことを示すOS由来のエラーコードです。npmの不具合と決めつけず、エラーに表示されたpathとsyscallを最初に確認します。
- Could not read package.json と表示されたらどう直す?
- pwdまたはcdで現在地を確認し、package.jsonがあるプロジェクトルートへ移動してからnpm installを実行します。新規プロジェクトなら、意図を確認したうえでnpm initを実行します。
- node_modulesとpackage-lock.jsonを削除すれば必ず直る?
- 直るのは依存関係の展開が途中で欠けた場合などに限られます。package.json自体の欠落、scriptsのパス誤り、workspace設定の誤りは削除しても直りません。まずエラーのpathを確認してください。
- Windowsの日本語や空白を含むパスはENOENTの原因になる?
- 日本語や空白を含むパス自体はWindowsで有効です。ただしnpm scriptや外部ツールがパスを正しく引用していないと別のパスとして解釈され、ENOENTになることがあります。短い英数字だけの場所へ移して再現差を確認します。
- How do I fix npm error code ENOENT?
- Read the path and syscall in the error first. Confirm that the path exists, run npm from the directory containing package.json, check script and workspace paths, and only rebuild node_modules when the missing path is inside the installed dependency tree.
関連ツール / Related tools
- JSON Formatter - package.jsonの構文と内容を確認
- Diff Checker - package-lock.json再生成前後の差分を確認