Ich möchte so etwas tun, npm install
installiert also auch die Abhängigkeiten package.json
von ../somelocallib
oder, was noch wichtiger ist.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Ich möchte so etwas tun, npm install
installiert also auch die Abhängigkeiten package.json
von ../somelocallib
oder, was noch wichtiger ist.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Antworten:
Diese Funktion wurde in der Version 2.0.0 von npm implementiert . Beispiel:
{
"name": "baz",
"dependencies": {
"bar": "file:../foo/bar"
}
}
Jeder der folgenden Pfade ist ebenfalls gültig:
../foo/bar
~/foo/bar
./foo/bar
/foo/bar
Das lokale Paket wird in das Präfix ( ) kopiert ../node-modules
Setzen Sie somelocallib
als Abhängigkeit in Ihre package.json
wie gewohnt:
"dependencies": {
"somelocallib": "0.0.x"
}
Führen Sie dann run aus npm link ../somelocallib
und npm installiert die Version, an der Sie arbeiten, als Symlink .
app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib
Referenz: Link (1)
npm dedup
, um dieses Problem zu beheben. npmjs.org/doc/cli/npm-dedupe.html
npm install <folder>
heißt es: Installieren Sie das Paket im Verzeichnis als Symlink im aktuellen Projekt.
Es ist jetzt möglich, lokale Installationspfade für Knotenmodule package.json
direkt in Ihrem anzugeben . Aus den Dokumenten:
Lokale Pfade
Ab Version 2.0.0 können Sie einen Pfad zu einem lokalen Verzeichnis angeben, das ein Paket enthält. Lokale Pfade können mit
npm install -S
odernpm install --save
mit einem der folgenden Formulare gespeichert werden :../foo/bar ~/foo/bar ./foo/bar /foo/bar
In diesem Fall werden sie auf einen relativen Pfad normalisiert und zu Ihrem hinzugefügt
package.json
. Zum Beispiel:{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
Diese Funktion ist hilfreich für die lokale Offline-Entwicklung und das Erstellen von Tests, für die eine npm-Installation erforderlich ist, bei der Sie keinen externen Server erreichen möchten, die jedoch nicht zum Veröffentlichen von Paketen in der öffentlichen Registrierung verwendet werden sollte.
"bar": "file:///home/user/src/foo/bar"
node:onbuild
nur das aktuelle Verzeichnis kopieren und somit alles weglassen ../foo
.
npm install
oder ein anderes Git-Repository im LAN vorhanden ist? Wenn ich die obige und npm-Installation von git + ssh aus versuche, scheint sie im Verzeichnis node_modules zu suchen und nicht zu versuchen, über git + ssh zu gehen, obwohl ich auf diese Weise das Paket der obersten Ebene installiere.
Das funktioniert bei mir.
Fügen Sie Folgendes in Ihre Datei package.json ein
"scripts": {
"preinstall": "npm install ../my-own-module/"
}
.gitignore
im Modulordner entfernt, erstellt .npmignore
und beim ersten Ausführen 777 rekursiv auf alle Ordner außer angewendet node_modules
. Aber ja, es hat die Abhängigkeiten installiert. Verwenden von npm Version 1.4.14.
"dependencies": { "my-own-module": "file:../my-own-module" }
?
npm link
besteht darin, dass Sie nicht npm install
jedes Mal etwas tun müssen, um Ihre Abhängigkeiten auf den neuesten Stand zu bringen.
Wenn Sie dies weiter automatisieren möchten, weil Sie Ihr Modul in die Versionskontrolle einchecken und sich nicht darauf verlassen möchten, dass Entwickler sich an den npm-Link erinnern, können Sie dies Ihrem Abschnitt "scripts" zu package.json hinzufügen:
"scripts": {
"postinstall": "npm link ../somelocallib",
"postupdate": "npm link ../somelocallib"
}
Das fühlt sich jenseits von Hacky an, aber es scheint "zu funktionieren". Ich habe den Tipp von dieser npm-Ausgabe erhalten: https://github.com/npm/npm/issues/1558#issuecomment-12444454
postinstall
und postupdate
statt preinstall
und preupdate
?
So fügen Sie lokale Abhängigkeiten hinzu:
npm install file:src/assets/js/FILE_NAME
Fügen Sie es zu package.json von NPM hinzu:
npm install --save file:src/assets/js/FILE_NAME
Fügen Sie direkt zu package.json wie folgt hinzu:
....
"angular2-autosize": "1.0.1",
"angular2-text-mask": "8.0.2",
"animate.css": "3.5.2",
"LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....
Hier ist die package.json, die Sie für das Masterprojekt verwenden werden:
"dependencies": {
"express": "*",
"somelocallib": "file:./somelocallib"
}
Dort ./somelocallib
befindet sich der Verweis auf den Bibliotheksordner relativ zum Masterprojekt package.json .
Referenz: https://docs.npmjs.com/files/package.json#local-paths
Behandeln Sie Ihre Bibliotheksabhängigkeiten.
Neben dem Laufen npm install
müssen Sie laufen (cd node_modules/somelocallib && npm install)
.
Dies ist ein bekannter Fehler bei NPM.
Referenz: https://github.com/npm/npm/issues/1341 (auf der Suche nach einer aktuelleren Referenz)
Checken Sie Ihren Master package.lock
und Ihren einsomelocallib/package.lock
Quellcode-Manager ein.
Dann verwenden Sie in Ihrer Docker-Datei:
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 meinen (cd A && B)
Konstrukten, um die Operation idempotent zu machen.
Ich weiß, dass das npm install ../somelocallib
funktioniert.
Ich weiß jedoch nicht, ob die in der Frage angezeigte Syntax von package.json
...
Leider scheint doc URL nur als Abhängigkeit zu erwähnen.
Versuchen Sie file:///.../...tar.gz
, auf eine komprimierte lokale Bibliothek zu zeigen ... und sagen Sie uns, ob es funktioniert.
Das hat bei mir funktioniert: Stellen Sie zunächst sicher, dass die npm-Verzeichnisse den richtigen Benutzer haben
sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules
Dann verknüpfen Sie in Ihrer package.json das Verzeichnis
"scripts": {
"preinstall": "npm ln mylib ../../path/to/mylib"
},
"dependencies": {
"mylib" : "*"
}
npm install
.
Ab npm 2.0 werden jetzt lokale Pfade unterstützt (siehe hier ).
Neugierig ..... zumindest unter Windows (meine npm ist 3.something) musste ich tun:
"dependencies": {
"body-parser": "^1.17.1",
"module1": "../module1",
"module2": "../module2",
Wenn ich eine machte npm install ../module1 --save
, führte dies zu absoluten Pfaden und nicht relativ gemäß der Dokumentation.
Ich spielte ein bisschen mehr herum und stellte fest, dass ../xxx
das ausreichend war.
Insbesondere habe ich die lokalen Knotenmodule ausgecheckt, um d: \ build \ module1, d: \ build \ module2 und mein Knotenprojekt (Anwendung) in d: \ build \ nodeApp zu sagen.
Um 'zu installieren', ich:
d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install
package.json von module1 hat die Abhängigkeit von "module2": "../module2"; Modul2 hat keine lokale Abhängigkeit; nodeApp hat Abhängigkeiten "module1": "../module1" und "module2": "../module2".
Ich bin mir nicht sicher, ob dies nur bei mir funktioniert, da sich alle 3 Ordner (Modul1, Modul2 und NodeApp) auf derselben Ebene befinden .......
Zwei Schritte für eine vollständige lokale Entwicklung: