Que faire lorsque vous rencontrez le problème node_modules avec docker-compose

Quelle sorte de problème?

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.

Comment l'avez-vous résolu?

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)

en conclusion

Je vous serais reconnaissant de bien vouloir me dire s’il existe une bonne solution.

Recommended Posts

Que faire lorsque vous rencontrez le problème node_modules avec docker-compose
Que faire en cas de problème pendant Content Assist
Que faire si vous obtenez une erreur NoClassDefFoundError lorsque vous essayez d'exécuter eclipse sur Java 9
Que faire lorsqu'une exception javax.el.PropertyNotWritableException se produit
Qu'utilisez-vous lors de la conversion en String?
<f: ajax> Impossible d'attacher <f: ajax> à un non-ClientBehaviorHolder Que faire lorsque vous devenez parent
Que faire si vous créez accidentellement un modèle
Que faire lorsqu'une exception java.io.IOException se produit dans GlassFish
Que faire lorsqu'une exception javax.batch.operations.JobStartException se produit
[Tutoriel Rails Chapitre 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
Que faire si une exception UnsupportedCharsetException se produit dans un JRE léger
Que faire si vous obtenez une erreur gcc dans Docker
Que faire si vous obtenez une erreur de bibliothèque partagée JNI lorsque vous essayez de créer avec Eclipse
Que faire lorsque la méthode non définie ʻuser_signed_in? '
Que faire si vous obtenez un avertissement groovy dans Thymeleaf Layout
[Android Studio] Que faire en cas d'erreur en crachant l'enfer
Que faire lorsque "call'Hoge.connection 'pour établir une connexion" apparaît sur les rails c
Que faire si vous recevez une alerte de vulnérabilité MiniMagick sur GitHub
Remarques sur la marche à suivre lorsqu'une exception WebView ClassNotFoundException se produit dans JavaFX 12
Que faire si l'opération non autorisée s'affiche lors de l'exécution d'une commande dans le terminal
Que faire si vous transmettez des informations incorrectes
Que faire lors du débogage "Source non trouvée"
Que faire si IllegalStateException se produit dans PlayFramework
Que faire lorsque vous pensez que vous ne pouvez pas Groovy-> Java avec IntelliJ IDEA CE
Que faire quand Pour installer la version manquante, exécutez `gem install bundler: 2.1.4`
[Ubuntu] Que faire lorsque MongoDB ne peut pas être démarré en raison d'une erreur SocketException
Que faire si le message "Un serveur est déjà en cours d'exécution" s'affiche. Erreur lors de la tentative de démarrage du serveur rails
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry
Que faire lorsque le certificat SSL a expiré
Que faire lorsque les balises JSF ne deviennent pas HTML
Que faire si une exception ClassNotFoundException se produit lors du démarrage de Tomcat
Que faire si vous obtenez une erreur indiquant "Veuillez saisir une valeur valide" lors de l'obtention avec Rails datetime_field
Erreur ExecJS :: RuntimeUnavailable: que faire quand cela se produit
ParseException: que faire lorsqu'une date impossible à analyser est atteinte
Remarques à vérifier lorsque vous essayez d'utiliser Lombok
<Installation par points> Que faire si vous ne pouvez pas continuer en raison d'une erreur lors de la création d'un environnement de développement pour l'apprentissage Rails.
Que faire lorsque vous ne pouvez pas formater l'objet donné en tant que date dans JSF convertDateTime
Que faire si une erreur d'analyseur SAX se produit lors de l'utilisation de Liferay 7 / DXP sur AWS
Que faire si vous obtenez une erreur «302» dans le code de test du contrôleur dans Rails
[Rails] Que faire lorsque la vue se réduit lorsqu'un message est affiché avec la méthode des erreurs
[Rails 6] Que faire lorsqu'une erreur de modèle manquante se produit après l'introduction du haml [Super facile]
Que faire quand il devient impossible de trouver CDI BeanManager.
Que faire lorsque la méthode n'est pas trouvée dans f: ajax
[IOS] Ce que vous devez savoir avant de créer un widget
Que faire lorsque vous ne pouvez pas appliquer d'opérateurs d'expression à la liaison de méthode
Que faire si mysql2 obtient une erreur d'installation de bundle
Que faire si la commande rails devient inutilisable
Que faire si vous vous déconnectez en raison d'une erreur de certificat SSL lors de l'exécution de Jenkins sur votre Mac
Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry