Ich möchte etwas in dieser Art machen, also npm install
installiert auch die package.json
de ../somelocallib
oder, was noch wichtiger ist, seine Abhängigkeiten.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Ich möchte etwas in dieser Art machen, also npm install
installiert auch die package.json
de ../somelocallib
oder, was noch wichtiger ist, seine Abhängigkeiten.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Hier ist die package.json, die Sie für das Masterprojekt verwenden werden:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Dort, ./somelocallib
ist der Verweis auf den Bibliotheksordner als relativ zum Masterprojekt package.json .
Referenz: https://docs.npmjs.com/cli/v7/configuring-npm/package-json#local-paths
Verwalten Sie Ihre Bibliotheksabhängigkeiten.
Zusätzlich zum Betrieb npm install
müssen Sie Folgendes ausführen (cd node_modules/somelocallib && npm install)
.
Dies ist ein bekannter Fehler von NPM.
Referenz: https://github.com/npm/npm/issues/1341 (auf der Suche nach einer aktuelleren Referenz)
Checken Sie Ihren Master ein package.lock
und Ihr somelocallib/package.lock
in Ihren Quellcode-Manager ein.
Dann verwenden Sie in Ihrem Dockerfile:
FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...
Ich verwende Klammern in meinem (cd A && B)
Konstrukte, um die Operation idempotent zu machen.
Zwei Schritte für eine vollständige lokale Entwicklung:
{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
cd ~/projects/node-redis # go into the package directory npm link # creates global link cd ~/projects/node-bloggy # go into some other package directory. npm link redis # link-install the package
Hier in 2020, auf einem Windows 10 arbeitend, habe ich versucht mit
"dependencies": {
"some-local-lib": "file:../../folderY/some-local-lib"
...
}
Dann wird eine npm
installieren. Das Ergebnis ist, dass eine Verknüpfung zu dem Ordner in node-modules
. Das funktioniert nicht. Sie brauchen einen Hard Link - den Windows unterstützt, aber Sie müssen in Windows etwas Besonderes tun, um einen harten Symlink zu erstellen.
Da ich nicht wirklich einen harten Link haben möchte, habe ich stattdessen eine URL verwendet:
"dependencies": {
"some-local-lib": "file:///D:\\folderX\\folderY\\some-local-lib.tar"
....
}
Und das funktioniert sehr gut.
Das tar (man muss das Zeug im Build/Dist-Ordner der Bibliothek entpacken) wird in einen echten Ordner in node-modules extrahiert, und man kann es wie alles andere importieren.
Natürlich ist der tar-Teil etwas lästig, aber da es sich bei "some-local-lib" um eine Bibliothek handelt (die sowieso gebaut werden muss), ziehe ich diese Lösung der Erstellung eines Hardlinks oder der Installation eines lokalen npm vor.
der Nachteil bei der Verwendung der file:../path/to/your-library
ist, dass Sie entweder npm install
oder mit npm link
um die Änderungen in den Paketen, die Ihr Paket importieren, wirksam werden zu lassen.
wenn Sie pnpm verwenden: eine bessere Lösung ist die Verwendung von workspace:
Protokoll : workspace:../path/to/your-library
. es wird das Verzeichnis zu Ihren node_modules symlinken, anstatt es zu kopieren, so dass alle Änderungen an der Quelle sofort wirksam werden.
zum Beispiel:
...
"dependencies": {
...
"my-package": "workspace:../../dist"
},
Hinweis: Diese Lösung ist für die Verwendung in einem Arbeitsbereich vorgesehen, daher müssen Sie möglicherweise pnpm-workspace.yaml
(auch eine leere) Datei in der Wurzel Ihres Projekts.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.