はじめに
ReactアプリをGitHub ActionsでCI/CDする中でnpm ciまわりでビルドが失敗しました。
ローカルでは動くのにCIで落ちる状態でした。
lockファイルが同期していない
npm error `npm ci` can only install packages when your package.json and package-lock.json are in sync.
npm ciはpackage-lock.jsonに厳密に従ってインストールするため、少しでも食い違うと落ちる(npm install は食い違いを吸収してくれる)。
今回はローカル(Node25)とCI(Node 22)の環境差でpackage-lock.jsonファイルが噛み合わなかった。
npm ci → npm install に変更すると解決。
- run: npm install
CI でだけ react が見つからない
[vite]: Rolldown failed to resolve import "react" from "src/main.jsx".
react とreact-domがpackage.jsonのdependenciesに入っていなかった。
ローカルではnode_modulesにreactがあるので動いていたが、CIはまっさらな状態から package.json を頼りにインストールするので落ちた。
npm install react react-dom
reactとreact-domを追加するとうまくいった。
package.jsonのdependenciesにしてもよい。
まとめ
-
npm ciはpackage-lock.jsonファイルに厳密 - 依存は
package.jsonに正しく書かれていないとCIで落ちる - 「ローカルでは動く」問題を暴いてくれるのがCIの役割