Mit npm können wir die Module mithilfe der -g
Option global installieren . Wie können wir dies in der Datei package.json tun?
Angenommen, dies sind meine Abhängigkeiten in der Datei package.json
"dependencies": {
"mongoose": "1.4.0",
"node.io" : "0.3.3",
"jquery" : "1.5.1",
"jsdom" : "0.2.0",
"cron" : "0.1.2"
}
Wenn ich laufe npm install
, möchte ich nur node.io
global installiert werden, der Rest andere sollten lokal installiert werden. Gibt es dafür eine Option?
"preferGlobal": true
in package.json ein Modul festlegen."preferGlobal":true
... Ich weiß nicht wirklich, wo ich das in package.json einfügen soll. npmjs.org/doc/json.html In der NPM-Dokumentation heißt es, dass prepareGlobal für Ihr eigenes Paket bestimmt ist und dass durch die Einstellung Ihr eigenes Paket als globales Paket installiert wird. es scheint jedoch eher ein Leitfaden zu sein.Antworten:
Neuer Hinweis: Sie möchten oder müssen dies wahrscheinlich nicht tun. Was Sie wahrscheinlich tun möchten, ist, diese Arten von Befehlsabhängigkeiten für Build / Test usw. in den
devDependencies
Abschnitt Ihrer package.json einzufügen. Jedes Mal, wenn Sie etwas ausscripts
package.json verwenden, verhalten sich Ihre devDependencies-Befehle (in node_modules / .bin) so, als ob sie sich in Ihrem Pfad befinden.Beispielsweise:
Dann in package.json:
Dann können Sie an Ihrer Eingabeaufforderung Folgendes ausführen:
Aber wenn Sie wirklich global installieren möchten, können Sie eine Preinstall in der Skripte Abschnitt des package.json hinzu:
Also führt meine npm-Installation die npm-Installation erneut aus. Das ist seltsam, scheint aber zu funktionieren.
Hinweis: Möglicherweise treten Probleme auf, wenn Sie das am häufigsten verwendete Setup für die
npm
Installation des globalen Knotenpakets verwendensudo
. Eine Möglichkeit besteht darin, Ihrenpm
Konfiguration so zu ändern , dass dies nicht erforderlich ist:npm config set prefix ~/npm
Fügen Sie $ PATH $ HOME / npm / bin hinzu, indem Sieexport PATH=$HOME/npm/bin:$PATH
an Ihren anhängen~/.bashrc
.quelle
npm i -g underscore-cli
. Es gibt eine Warnung, dass WD falsch ist. wd bedeutet Arbeitsverzeichnis, denke ich. Wenn ich dies manuell in der Kommandozeilenpm install
npm list module -g || npm install module -g
as npm gibt die richtigen Exit-Werte zurück."preinstall" : "scripts/preinstall.sh"
).&&
zum Beispiel mitnpm install -g bower && npm install -g grunt-cli
Aufgrund der unten beschriebenen Nachteile würde ich empfehlen, der akzeptierten Antwort zu folgen:
Meine ursprüngliche, aber nicht empfohlene Antwort folgt.
Anstatt eine globale Installation zu verwenden, können Sie das Paket zu Ihrem
devDependencies
(--save-dev
) hinzufügen und dann die Binärdatei von einer beliebigen Stelle in Ihrem Projekt aus ausführen:In deinem Fall:
Dieser Ingenieur hat einen
npm-exec
Alias als Verknüpfung bereitgestellt . Dieser Ingenieur verwendet ein Shellscript namensenv.sh
. Ich bevorzuge jedoch die$(npm bin)
direkte Verwendung , um zusätzliche Dateien oder Einstellungen zu vermeiden.Obwohl es jeden Anruf etwas größer macht, sollte es einfach funktionieren und Folgendes verhindern:
sudo
Nachteile:
$(npm bin)
funktioniert nicht unter Windows.npm bin
Ordner angezeigt. (Installieren Sie npm-run oder npm-which , um sie zu finden.)Es scheint eine bessere Lösung zu sein, allgemeine Aufgaben (wie das Erstellen und Minimieren) im Abschnitt "Skripte" von Ihnen zu platzieren
package.json
, wie Jason oben demonstriert.quelle
.bashrc
, um dasbin/
Verzeichnis einfach zu IhrerPATH
Umgebungsvariablen hinzuzufügen :alias nodebin='export PATH=$(npm bin)/:$PATH'
. Ausführennodebin
und dann können Sie einfach Ihre Befehle wie gewohnt eingeben.Das ist ein bisschen alt, aber ich bin auf die Anforderung gestoßen. Hier ist die Lösung, die ich gefunden habe.
Das Problem:
Unser Entwicklungsteam verwaltet viele .NET-Webanwendungsprodukte, die wir auf AngularJS / Bootstrap migrieren. VS2010 eignet sich nicht einfach für benutzerdefinierte Build-Prozesse, und meine Entwickler arbeiten routinemäßig an mehreren Releases unserer Produkte. Unser VCS ist Subversion (ich weiß, ich weiß. Ich versuche, zu Git zu wechseln, aber meine lästigen Marketingmitarbeiter sind so anspruchsvoll) und eine einzige VS-Lösung wird mehrere separate Projekte enthalten. Ich brauchte meine Mitarbeiter, um eine gemeinsame Methode zum Initialisieren ihrer Entwicklungsumgebung zu haben, ohne dieselben Knotenpakete (gulp, bower usw.) mehrmals auf demselben Computer installieren zu müssen.
TL; DR:
Benötigen Sie "npm install", um die globale Node / Bower-Entwicklungsumgebung sowie alle lokal erforderlichen Pakete für ein .NET-Produkt zu installieren.
Globale Pakete sollten nur installiert werden, wenn sie noch nicht installiert sind.
Lokale Links zu globalen Paketen müssen automatisch erstellt werden.
Die Lösung:
Wir haben bereits ein gemeinsames Entwicklungsframework, das von allen Entwicklern und allen Produkten gemeinsam genutzt wird. Daher habe ich ein NodeJS-Skript erstellt, um die globalen Pakete bei Bedarf zu installieren und die lokalen Links zu erstellen. Das Skript befindet sich in ".... \ SharedFiles" relativ zum Produktbasisordner:
Wenn ich nun ein globales Tool für unsere Entwickler aktualisieren möchte, aktualisiere ich das Objekt "packages" und checke das neue Skript ein. Meine Entwickler checken es aus und führen es entweder mit "node npm-setup.js" oder mit "npm install" von einem der in der Entwicklung befindlichen Produkte aus, um die globale Umgebung zu aktualisieren. Das Ganze dauert 5 Minuten.
Um die Umgebung für einen neuen Entwickler zu konfigurieren, müssen diese zunächst nur NodeJS und GIT für Windows installieren, ihren Computer neu starten, den Ordner "Freigegebene Dateien" und alle in der Entwicklung befindlichen Produkte überprüfen und mit der Arbeit beginnen.
Die Datei "package.json" für das .NET-Produkt ruft dieses Skript vor der Installation auf:
Anmerkungen
Beachten Sie, dass die Skriptreferenz auch in einer Windows-Umgebung Schrägstriche erfordert.
"npm ls" gibt "npm ERR! extraneous:" Nachrichten für alle lokal verknüpften Pakete aus, da sie nicht in den "package.json" "Abhängigkeiten" aufgeführt sind.
Bearbeiten 29.01.16
Das oben aktualisierte
npm-setup.js
Skript wurde wie folgt geändert:Paket "Version" in
var packages
ist jetzt der Wert für "Paket", dernpm install
in der Befehlszeile übergeben wird. Dies wurde geändert, um die Installation von Paketen von einem anderen Ort als dem registrierten Repository zu ermöglichen.Wenn das Paket bereits installiert ist, aber nicht angefordert wird, wird das vorhandene Paket entfernt und das richtige installiert.
Aus unbekannten Gründen gibt npm bei der Installation oder Verknüpfung regelmäßig einen EBUSY-Fehler (-4082) aus. Dieser Fehler wird abgefangen und der Befehl erneut ausgeführt. Der Fehler tritt selten ein zweites Mal auf und scheint sich immer zu klären.
quelle
Sie können
npm_globals.txt
stattdessen eine separate Datei verwendenpackage.json
. Diese Datei würde jedes Modul in einer neuen Zeile wie dieser enthalten:Dann in der Kommandozeile ausführen,
Überprüfen Sie, ob sie ordnungsgemäß installiert wurden mit,
Ob Sie dies tun sollten oder nicht, hängt meiner Meinung nach vom Anwendungsfall ab. Für die meisten Projekte ist dies nicht erforderlich. Es
package.json
wird sehr bevorzugt, wenn Ihre Projekte diese Tools und Abhängigkeiten zusammenfassen.Aber heutzutage stelle ich fest, dass ich immercreate-react-app
andere CLIs global installiere, wenn ich auf einen neuen Computer springe. Es ist schön, eine einfache Möglichkeit zu haben, ein globales Tool und seine Abhängigkeiten zu installieren, wenn die Versionierung keine große Rolle spielt.Und heute, ich verwende
npx
, ein npm Paket Läufer , statt Pakete global installieren.quelle
Alle Module aus package.json werden unter ./node_modules/ installiert.
Ich konnte dies nicht explizit angeben, aber dies ist die package.json-Referenz für NPM .
quelle
Erstellen Sie Ihr eigenes Skript, um globale Abhängigkeiten zu installieren. Es braucht nicht viel. package.json ist ziemlich erweiterbar.
Mit dem oben genannten können Sie es sogar unten inline machen!
Schauen Sie sich die Vorinstallation unten an:
Die Autoren von node geben möglicherweise nicht zu, dass package.json eine Projektdatei ist. Aber es ist.
quelle