Was tun, wenn Sie mit Docker-Compose auf das Problem node_modules stoßen?

Welche Art von Problem?

Als ich kürzlich eine Umgebung für "node" mit "docker-compose" erstellte, stieß ich auf ein Problem, dass "node_modules" im Container irgendwohin ging.

Nach vielen Recherchen scheint es, dass wenn ich das lokale Verzeichnis im Container mit "Docker-Compose" einbinde, es überschrieben wird und die "Knotenmodule" im Container verschwinden.

Wie haben Sie es gelöst?

Wenn man sich Artikel wie https://qiita.com/suin/items/e53eee56da23d476addc ansieht, scheint es, dass dies vermieden werden kann, indem man dort "Volumes" erstellt und "node_modules" einbindet. In diesem Fall wird jedoch "node_modules" nicht in der lokalen Umgebung generiert, sodass die Typdefinition des Pakets nicht mit "TypeScript" referenziert werden kann und der Geschmack der Verwendung von "TypeScript" verringert wird.

Um dieses Problem zu lösen, können Sie auch "Garninstallation" mit dem Befehl "Docker-Compose" durchführen, um "Knotenmodule" in dem lokal gemounteten Container zu erstellen und "Knotenmodule" lokal zu haben. Ich habe einen Artikel gesehen, den ich mir ausgedacht habe. Bei dieser Methode wird "Garninstallation" jedoch ausgeführt, wenn "Docker-Compose-Up" ausgeführt wird, sodass "Docker-Compose-Up" eine angemessene Zeit in Anspruch nahm. (Es schien viel Zeit in Anspruch zu nehmen, um die "node_modules" lokal in den Container zu bringen.)

Deshalb habe ich versucht, es mit der folgenden Methode zu lösen. (Wenn diese Lösung schlecht ist, lassen Sie es mich bitte wissen und Sie werden lernen)

.
├── 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: #← Hinzufügen
  app_node_modules: #← Hinzufügen
services:
  app:
    image: ./app
    volumes:
      - ./app/src:/app/
      - ./app/src/node_modules:/app/node_modules #← Hinzufügen
#Folgendes wird weggelassen

Bisher ist es dasselbe wie der Artikel unter https://qiita.com/suin/items/e53eee56da23d476addc. Darüber hinaus wird durch Ausführen des folgenden Skripts beim Hinzufügen eines Pakets (anstelle von "Docker-Compose-Build") auch "Knotenmodule" lokal generiert.

build.sh


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

Dies löste vorerst das Problem, dass node_modules verschwand und das Problem, dass es keine Typdefinition gab. Da jedoch davon ausgegangen wird, dass es in der lokalen Umgebung einen "Knoten" gibt, wünschte ich mir eine bessere Lösung. (Aber ich habe es nicht verstanden)

abschließend

Ich wäre Ihnen dankbar, wenn Sie mir sagen könnten, ob es eine gute Lösung gibt.

Recommended Posts

Was tun, wenn Sie mit Docker-Compose auf das Problem node_modules stoßen?
Was tun bei Problem während der Inhaltsunterstützung?
Was tun, wenn beim Versuch, Eclipse unter Java 9 auszuführen, ein NoClassDefFoundError angezeigt wird?
Was tun, wenn eine javax.el.PropertyNotWritableException auftritt?
Was verwenden Sie beim Konvertieren in String?
<f: ajax> <f: ajax> kann nicht an Nicht-ClientBehaviorHolder angehängt werden. Was tun, wenn Sie Eltern werden?
Was tun, wenn Sie versehentlich ein Modell erstellen?
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
Was tun, wenn eine javax.batch.operations.JobStartException auftritt?
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
Was tun, wenn in einer Lightweight-JRE eine UnsupportedCharsetException auftritt?
Was tun, wenn in Docker ein gcc-Fehler auftritt?
Was tun, wenn beim Versuch, mit Eclipse zu erstellen, ein Fehler in der gemeinsam genutzten JNI-Bibliothek auftritt?
undefinierte Methode Was tun, wenn Sie "user_signed_in" erhalten?
Was tun, wenn Sie in Thymeleaf Layout eine groovige Warnung erhalten?
[Android Studio] Was Sie versuchen sollten, wenn Sie in die Hölle geraten
Was ist zu tun, wenn auf den Schienen cHoge.connection aufruft, um eine Verbindung herzustellen? C.
Was tun, wenn auf GitHub eine MiniMagick-Sicherheitsanfälligkeitswarnung angezeigt wird?
Hinweise zur Vorgehensweise beim Auftreten einer WebView ClassNotFoundException in JavaFX 12
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was tun, wenn Sie falsche Informationen eingeben?
Was tun beim Debuggen von "Quelle nicht gefunden"?
Was tun, wenn in PlayFramework eine IllegalStateException auftritt?
Was tun, wenn Sie glauben, dass Sie mit IntelliJ IDEA CE nicht Groovy-> Java können?
Was tun, wenn Um die fehlende Version zu installieren, führen Sie `gem install bundler: 2.1.4` aus
[Ubuntu] Was tun, wenn MongoDB aufgrund eines SocketException-Fehlers nicht gestartet werden kann?
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?
Was tun, wenn das SSL-Zertifikat abgelaufen ist?
Was tun, wenn JSF-Tags nicht zu HTML werden?
Was tun, wenn beim Starten von Tomcat eine ClassNotFoundException auftritt?
Was tun, wenn beim Abrufen von Rails datetime_field die Fehlermeldung "Bitte geben Sie einen gültigen Wert ein" angezeigt wird?
Fehler ExecJS :: RuntimeUnavailable: Was tun, wenn es auftritt?
ParseException: Was tun, wenn ein nicht analysierbares Datum erreicht ist?
Hinweise zur Überprüfung bei der Verwendung von Lombok
<Punktinstallation> Was tun, wenn Sie aufgrund eines Fehlers beim Erstellen einer Entwicklungsumgebung für das Rails-Lernen nicht fortfahren können?
Was ist zu tun, wenn ein bestimmtes Objekt in JSF convertDateTime nicht als Datum formatiert werden kann?
Was tun, wenn bei Verwendung von Liferay 7 / DXP unter AWS ein SAX-Parser-Fehler auftritt?
Was tun, wenn im Testcode der Steuereinheit in Rails der Fehler "302" angezeigt wird?
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
[Rails 6] Was tun, wenn nach der Einführung von haml ein fehlender Vorlagenfehler auftritt? [Super easy]
Was tun, wenn CDI BeanManager nicht mehr gefunden werden kann?
Was tun, wenn die Methode in f: ajax nicht gefunden wurde?
[IOS] Was Sie wissen müssen, bevor Sie ein Widget erstellen
Was ist zu tun, wenn Ausdrucksoperatoren nicht auf die Methodenbindung angewendet werden können?
Was tun, wenn mysql2 einen Bundle-Installationsfehler erhält?
Was tun, wenn der Befehl Rails unbrauchbar wird?
Was tun, wenn Sie aufgrund eines SSL-Zertifikatfehlers offline gehen, wenn Sie Jenkins auf Ihrem Mac ausführen?
Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?