Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

docker-composeのnode_modules問題にぶちあったたときにやった対処方法

$
0
0

どんな問題?

最近、docker-composenodeの環境を構築するとき、コンテナ内のnode_modulesがどっかに行ってしまうという問題に遭遇した。

いろいろ調べてみると、docker-composeでローカルのディレクトリをコンテナ内にマウントする際に、上書きされてしまい、コンテナ内のnode_modulesが消えてしまっているようだ。

どう解決したの?

https://qiita.com/suin/items/e53eee56da23d476addcの記事などを見ると、volumesを作成し、node_modulesをそこにマウントすることで、回避することができるようだ。
しかし、これだとローカル環境にnode_modulesが生成されないため、TypeScriptでパッケージの型定義を参照できず、TypeScriptを使うことの旨味が薄れてしまう。

この問題を解決するために、docker-composecommandyarn installもすることで、コンテナ内のnode_modulesをローカルにマウントされるようにして、ローカルにnode_modulesを持ってくるようにしている記事を見た。
だが、この方法だとdocker-compose upをするときにyarn installが走ってしまうため、docker-compose upでまあまあな時間がかかってしまった。(ローカルにコンテナ内のnode_modulesを持ってくるのにもめちゃめちゃ時間がかかっているようだった)

そこで、以下のような方法で解決をするようにした。(この解決方法がBadであれば、教えていただけると勉強になります)

.
├── app
│   ├── Dockerfile
│   └── src
│       ├── package.json
│       └── yarn.lock
└── docker-compose.yml
Dockerfile
FROM nodeWORKDIR /appADD src/package.json /app/ADD src/yarn.lock /app/RUN yarn install
docker-compose.yml
volumes:# ←追加app_node_modules:# ←追加services:app:image:./appvolumes:-./app/src:/app/-./app/src/node_modules:/app/node_modules# ←追加# 以下略

ここまでは https://qiita.com/suin/items/e53eee56da23d476addcの記事と同じだ。
これにプラスで、パッケージを追加したときに以下のスクリプトを実行すること(docker-compose buildの代わり)で、ローカルにもnode_modulesを生成するようにした。

build.sh
docker-compose build
cd app/src && yarn install

とりあえずこれで、node_modulesが消えてしまう問題と型定義がない問題を解決することができた。
しかし、ローカル環境にnodeがあることが前提になってしまっているため、もっといい解決方法があればいいな〜と思っている。(が、わからなかった)

おわりに

いい解決方法があればぜひ教えていただけると嬉しいです。


Viewing all articles
Browse latest Browse all 8691

Trending Articles