Dockerでインストールしたnpmパッケージが動かない時
Dockerを使ってReact(Vite)とPostgreSQLの開発環境を構築しているときに、少しハマったことがありました。Docker内で依存パッケージをインストールしたにもかかわらず、ローカル環境で「モジュールが見つからない」というエラーが出るという現象です。原因と解決方法について、まとめてみます。
開発環境
- MacBook Air (M2, 2022)(Apple Silicon)
- OS: macOS Sonoma 14.5
構成
project-root/
├── frontend/
├── backend/
├── docker/
│ ├── frontend/
│ ├── backend/
│ └── db/
└── docker-compose.yml
問題が発生した状況
Dockerでnpm install tailwind-merge
を実行し、依存関係が追加されました。package.json
にもtailwind-merge
が記載され、Docker環境ではエラーもなく正常に動作していました。
しかし、ローカルのエディタやブラウザで確認すると、tailwind-merge
が見つからないというエラーが発生。Dockerでは動くのに、ローカル環境ではtailwind-merge
がない状態として扱われているようでした。
原因
Dockerとローカル環境が独立しているため、Docker内でインストールした依存関係がローカルのnode_modules
には反映されていないことが原因でした。
Dockerでnpm install
すると、Dockerコンテナ内のnode_modules
ディレクトリに依存関係がインストールされますが、ローカルのnode_modules
には影響がありません。そのため、エディタやブラウザでの動作確認では、ローカル環境が依存関係の不足としてエラーを表示してしまいます。
解決方法
Docker内で依存関係を追加した場合、ローカル環境でも同じ依存関係をインストールする必要があります。以下の手順でローカルにも反映させましょう。
-
Dockerで依存関係をインストール
npm install tailwind-merge
これでDocker環境内で
tailwind-merge
が追加され、package.json
にも反映されます。 -
ローカル環境でも
npm install
を実行cd frontend # フロントエンドのディレクトリに移動 npm install # ローカルのnode_modulesに依存関係を反映
これにより、ローカルの
node_modules
にも同じ依存関係が追加され、エディタでのエラーが解消されます。
まとめ
Docker環境とローカル環境は独立しているため、Docker内でのnpm install
はローカルのnode_modules
には反映されません。新しいパッケージを追加した場合は、Docker環境とローカル環境の両方で依存関係を揃えることで、開発時のエラーを防ぐことができます。特にDockerを活用した開発では、ローカルとコンテナのnode_modules
の違いに注意が必要です。
今後、Dockerでの開発中に依存関係を追加したら、ローカルでもnpm install
を忘れずに実行することをお勧めします。同じような状況の方にとって参考になれば幸いです!
Discussion