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.