

npm ci --prefixは指定ディレクトリにpackage.jsonが無いと動かない
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
npm ci --prefix path/to/dir で指定ディレクトリにインストールできるか気になったので試した。
試したこと
適当なサブディレクトリに package.json と package-lock.json を用意して、親ディレクトリから --prefix 経由で npm ci を叩いてみた。
$ npm ci --prefix ./subadded 1 package, and audited 2 packages in 680ms./sub/node_modules に依存パッケージがインストールされた。cwdを移動せずに済むので、複数モジュールを持つリポジトリのビルドスクリプトなどでは便利。
前提条件がある
ただし動作するのは、指定ディレクトリ側に package.json と package-lock.json(または npm-shrinkwrap.json)が両方すでに存在している場合。
package-lock.json はあるが package.json が無い、というディレクトリに対して --prefix を使うとエラーになる不具合が npm/cli のリポジトリで複数バージョンにわたって報告されている(npm/cli#4001)。cwdを移動して直接 npm ci を叩けば問題なく動くケースでも、--prefix 経由だとコケるらしい。手元では未確認。
挙動としてはnpm installと同じ
--prefix を付けても npm ci は通常通り、実行前に対象ディレクトリの node_modules を削除してからクリーンインストールする。ここは --prefix の有無に関係ない共通の挙動。
まとめ
path/to/dirにpackage.json+package-lock.jsonが揃っていればnpm ci --prefix path/to/dirは問題なく動く- 揃っていない状態(特に
package.jsonが無い状態)だと失敗する報告がある