Ich möchte so etwas tun, npm installinstalliert also auch die Abhängigkeiten package.jsonvon ../somelocalliboder, was noch wichtiger ist.
"dependencies": {
"express": "*",
"../somelocallib": "*"
}
Ich möchte so etwas tun, npm installinstalliert also auch die Abhängigkeiten package.jsonvon ../somelocalliboder, 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 somelocallibals Abhängigkeit in Ihre package.jsonwie gewohnt:
"dependencies": {
"somelocallib": "0.0.x"
}
Führen Sie dann run aus npm link ../somelocallibund 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.jsondirekt 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 -Sodernpm install --savemit einem der folgenden Formulare gespeichert werden :../foo/bar ~/foo/bar ./foo/bar /foo/barIn 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:onbuildnur das aktuelle Verzeichnis kopieren und somit alles weglassen ../foo.
npm installoder 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/"
}
.gitignoreim Modulordner entfernt, erstellt .npmignoreund 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 linkbesteht darin, dass Sie nicht npm installjedes 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
postinstallund postupdatestatt preinstallund 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 ./somelocallibbefindet 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.lockund 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 ../somelocallibfunktioniert.
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 ../xxxdas 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: