Récemment, lors de la création d'un environnement pour node avec docker-compose, j'ai rencontré un problème qui faisait que node_modules dans le conteneur allait quelque part.
Après de nombreuses recherches, il semble que lorsque je monte le répertoire local à l'intérieur du conteneur avec docker-compose, il est écrasé et les node_modules à l'intérieur du conteneur disparaissent.
En regardant les articles tels que https://qiita.com/suin/items/e53eee56da23d476addc, il semble que cela puisse être évité en créant des volumes et en y installant node_modules.
Cependant, dans ce cas, node_modules n'est pas généré dans l'environnement local, donc la définition de type du package ne peut pas être référencée avec TypeScript, et le goût d'utiliser TypeScript est diminué.
Pour résoudre ce problème, vous pouvez également faire yarn install avec commande de docker-compose pour rendre node_modules dans le conteneur monté localement et avoir node_modules localement. J'ai vu un article que j'essayais de trouver.
Cependant, avec cette méthode, yarn install s'exécute lors de docker-compose up, donc cela a pris un temps raisonnable avec docker-compose up. (Il semblait que cela prenait beaucoup de temps pour amener les node_modules dans le conteneur localement)
Par conséquent, j'ai essayé de le résoudre par la méthode suivante. (Si cette solution est mauvaise, faites-le moi savoir et vous apprendrez)
.
├── app
│ ├── Dockerfile
│ └── src
│ ├── package.json
│ └── yarn.lock
└── docker-compose.yml
Dockerfile
FROM node
WORKDIR /app
ADD src/package.json /app/
ADD src/yarn.lock /app/
RUN yarn install
docker-compose.yml
volumes: #← Ajouter
app_node_modules: #← Ajouter
services:
app:
image: ./app
volumes:
- ./app/src:/app/
- ./app/src/node_modules:/app/node_modules #← Ajouter
#Ce qui suit est omis
Jusqu'à présent, c'est le même que l'article sur https://qiita.com/suin/items/e53eee56da23d476addc.
En plus de cela, en exécutant le script suivant lors de l'ajout d'un package (au lieu de docker-compose build), node_modules est également généré localement.
build.sh
docker-compose build
cd app/src && yarn install
Pour le moment, cela a résolu le problème de la disparition de node_modules et le problème de l'absence de définition de type.
Cependant, étant donné qu'il est supposé qu'il y a un «nœud» dans l'environnement local, j'aimerais qu'il y ait une meilleure solution. (Mais je n'ai pas compris)
Je vous serais reconnaissant de bien vouloir me dire s’il existe une bonne solution.