Knotenpaketmanager (NPM) bietet Webentwicklern viele bequeme JavaScript -Module und vereinfacht die Suche und Verwaltung von Anwendungsabhängigkeiten erheblich. Es erleichtert auch Entwickler, ihre eigenen Module zu erstellen und zu veröffentlichen, die andere Entwickler mit nur npm install -g your-tool
einfach erhalten und verwenden können. Klingt perfekt, oder?
uh, eigentlich ... das ist nicht der Fall.
Schlüsselpunkte
-g
zur Installation von NPM -Modulen kann Probleme verursachen, denn selbst wenn das Projekt von globalen Modulen abhängt, werden diese Module nicht als Abhängigkeiten für das Projekt aufgeführt. Dies erhöht die Arbeitsbelastung anderer Personen, die die App verwenden, und kann zu Versionskonflikten führen. -g
zu entfernen und durch --save-dev
zu ersetzen. Dies spart das Modul als Entwicklungsabhängigkeit und stellt sicher, dass es beim Ausführen npm install
installiert ist. ./node_modules/.bin/
platziert. Wenn Sie NPM -Skripte verwenden, können Sie diesen Vorgang vereinfachen und die lokale Version des Moduls mit kürzeren Befehlen ausgeführt werden. Wir hatten einige Probleme
Ich werde nicht sagen, dass ich das NPM -Modul mit der Option -g
niemals installieren soll, aber ich muss sagen, dass Überbeanspruchung davon Probleme verursachen kann. Ich denke Sehr beliebt und liest hell lässig, aber wenn Sie Schluder nicht mögen, ersetzen Sie es einfach in Ihrem Kopf durch das Werkzeug, das Sie mögen.
Erstens werden globale Module nicht als Abhängigkeiten für Projekte aufgeführt, wodurch die Arbeitsbelastung anderer Personen, die Ihre Anwendung verwenden, erhöht, selbst wenn Ihre Projekte von ihnen abhängen. Sie wissen, dass Sie Gulp verwenden müssen, um die Produktionsumgebung Ihres Projekts vorzubereiten. Sie installieren und verwenden sie global. Wenn andere anfangen möchten oder an Ihrem hervorragenden Open -Source -Projekt arbeiten, können sie nicht einfach npm install
eingeben und arbeiten. Sie müssen irgendwann Anweisungen in der Readme -Datei hinzufügen, zum Beispiel:
Befolgen Sie die folgenden Schritte, um dieses Projekt zu verwenden:
npm install
npm install -g gulp
gulp
bauen Ich habe zwei Probleme gesehen: Zuerst haben Sie die zusätzlichen Schritte hinzugefügt, um Gulp weltweit zu installieren. Ich habe einen zusätzlichen Schritt gesehen, der hätte vermieden werden können (globale Installation von Gulp), und ich habe gesehen, dass Benutzer wissen müssen, dass Ihre Anwendung Gulp verwendet, um das Projekt zu erstellen. In diesem Artikel wird hauptsächlich die erste Ausgabe erläutert, und obwohl das zweite Problem nicht so schwerwiegend ist, müssen Sie die Anweisungen aktualisieren, wenn Sie das Tool wechseln. Die Lösung, die ich später besprechen werde, sollte beide Probleme lösen.
Das zweite Hauptproblem im Zusammenhang mit der weltweiten Installation von Modulen besteht darin, dass Sie aufgrund der falschen Modulversion möglicherweise auf Konflikte stoßen. Die folgenden zwei Beispiele veranschaulichen dies:
Diese Probleme können sehr ernst sein. Aber wie ich bereits sagte, werde ich im Allgemeinen nicht sagen, dass Sie weltweit nie etwas installieren. Es gibt einige Ausnahmen.
standardmäßig erfordert die globale Installation von NPM -Modulen erhöhte Berechtigungen. Wenn Sie einen Befehl wie sudo npm install -g a-package
ausführen, sollten Sie diesen Befehl ändern. Unser NPM -Anfängerführer zeigt Ihnen, wie es geht.
Ausnahmen
Was können Sie weltweit installieren? Kurz gesagt: Alles, worauf Ihr Projekt nicht angewiesen ist. Zum Beispiel habe ich ein globales Modul namens local-web-server
installiert. Wann immer ich nur einige HTML -Dateien in meinem Browser anzeigen muss, reite ich ws
aus (dies ist der Befehl für local-web-server
), der den aktuellen Ordner auf das Stamm Browser und testen Sie es. localhost:8000
installiert und kann jedes Skript in Sekundenschnelle aus der Befehlszeile leicht komprimieren. uglify-js
Lösung
Wie sollten wir es jetzt verhindern, dass wir wissen, wo das Problem auftreten kann? Das erste, was Sie tun müssen, ist bei der Installation des Moduls -g
zu entfernen. Sie sollten es durch --save-dev
ersetzen, damit Sie das Modul als Entwicklungsabhängigkeit speichern können, und es wird immer installiert, wenn jemand npm install
ausführt. Dies wird nur eines der kleinen Probleme lösen, die ich zuvor erwähnt habe, aber es ist nur der Anfang.
Was Sie wissen müssen, ist, dass wenn Sie die Abhängigkeiten lokal installieren, wenn sie Skripte enthält, die aus der Befehlszeile ausgeführt werden sollen, sie in das Verzeichnis ./node_modules/.bin/
platziert werden. Wenn Sie also nur Gulp lokal installieren, können Sie es ausführen, indem Sie ./node_modules/.bin/gulp
in die Befehlszeile eingeben. Natürlich will niemand all dies eingeben. Sie können NPM -Skripte verwenden, um dieses Problem zu beheben.
In Ihrer package.json
-Datei können Sie ein scripts
-Reziers hinzufügen, ähnlich wie folgt:
{ ... "scripts": { "gulp": "gulp" } }
Sie können jetzt jederzeit npm run gulp
ausführen, um die lokale Version von Gulp auszuführen. Das NPM -Skript sucht nach einer lokalen Kopie des ausführbaren Befehls im Verzeichnis ./node_modules/.bin/
, bevor Sie die Pfadumgebungsvariable überprüfen. Wenn Sie möchten, können Sie sogar andere Parameter an das Schlucken übergeben, indem Sie vor diesen Parametern --
hinzufügen, beispielsweise npm run gulp -- build-dev
entspricht gulp build-dev
.
Sie müssen immer noch mehr tippen, als Gulp weltweit zu verwenden, aber das ist schlecht, aber es gibt zwei Möglichkeiten, dieses Problem zu lösen. Der erste Ansatz (auch eines der oben genannten Probleme gelöst) besteht darin, Alias mithilfe von NPM -Skripten zu erstellen. Zum Beispiel müssen Sie Ihre Anwendung nicht an Schlupf binden, damit Sie Skripte erstellen können, die Gulp ausführen, aber Gulp nicht erwähnen:
{ ... "scripts": { "build": "gulp build-prod", "develop": "gulp build-dev" } }
Auf diese Weise können Sie Anrufe kürzer telefonieren und Ihre Skripte universell halten. Durch die Vielseitigkeit können Sie immer transparent den Schluck entfernen und durch etwas anderes ersetzen, ohne dass jemand es wissen muss (es sei denn ). Alternativ können Sie ihm sogar ein postinstall
-Skript hinzufügen, damit der Build -Prozess automatisch ausgeführt wird, nachdem jemand npm install
ausgeführt wird. Dies vereinfacht Ihre Readme -Dateien stark. Durch die Verwendung von NPM -Skripten sollte jeder, der Ihr Projekt kloniert, eine einfache und einfache Dokumentation zu allen Prozessen erhalten, die Sie in der Datei package.json
in Ihrem Projekt ausführen.
Zusätzlich zur Verwendung von NPM -Skripten gibt es einen weiteren Trick, mit dem Sie die lokale Installation von Befehlszeilen -Tools verwenden können: relativ zum Pfad. Ich habe meine Pfadumgebungsvariable ./node_modules/.bin/
hinzugefügt. Solange ich im Projekt des Projekts bin, kann ich auf das Befehlstool zugreifen, indem ich den Namen des Befehls eingeben kann. Ich habe diesen Trick aus Kommentaren zu einem anderen Beitrag gelernt, den ich geschrieben habe (dank Gabriel Falkenberg).
Diese Tricks sind nicht ganz ein Ersatz für jede Situation, in der Sie Tools wie Gulp verwenden möchten. Sie benötigen einige Arbeit, um es einzurichten, aber ich denke, dass das Auflisten dieser Tools als Abhängigkeiten eine beste Praxis sein sollte. Dies verhindert Versionskonflikte (was einer der Hauptgründe für Abhängigkeitsmanager in erster Linie ist) und wird dazu beitragen, die Schritte zu vereinfachen, die andere benötigen, um Ihr Projekt zu erhalten.
Gehen Sie einen Schritt weiter
Dies mag ein wenig überflüssig sein, aber ich denke, Node und NPM sind auch Abhängigkeiten für Ihr Projekt, und sie haben mehrere verschiedene Versionen, die konflikt. Wenn Sie sicherstellen möchten, dass Ihre Anwendung für alle funktioniert, müssen Sie eine Möglichkeit benötigen, um sicherzustellen, dass der Benutzer auch über die richtige Version von Node und NPM installiert ist.
Sie können lokale Kopien von Knoten und NPM in Ihr Projekt einbauen! Aber das löst nicht alle Probleme. Erstens unterscheidet sich der Knoten in jedem Betriebssystem, sodass jeder noch sicherstellen muss, dass er eine Version herunterlädt, die mit seinem Betriebssystem kompatibel ist. Zweitens müssen Sie auch dann sicherstellen, dass jeder eine einfache Möglichkeit hat, einen gemeinsamen Knoten zu installieren zu ihrer Pfadumgebungsvariablen. Es gibt keine einfache Möglichkeit, dies zu garantieren.
Während ich gerne eine bestimmte Version von Node und NPM für jedes Projekt erzwingen würde, kann ich mir keine gute Möglichkeit vorstellen, dies zu tun. Wenn Sie der Meinung sind, dass dies eine gute Idee ist und eine gute Lösung finden, lassen Sie es uns alle in den Kommentaren wissen. Ich würde gerne eine einfache Lösung sehen, um dies zu einer Standardpraxis zu machen!
Schlussfolgerung
Ich hoffe, Sie können jetzt die Bedeutung von versionierten Abhängigkeiten verstehen, die Tools als Projekte auflisten. Ich hoffe auch, dass Sie bereit sind, hart zu arbeiten, um diese Praktiken in Ihren eigenen Projekten umzusetzen, damit wir sie als Standard bewerben können. Wenn Sie keine bessere Idee haben, sagen Sie es aus und lassen Sie die ganze Welt wissen!
FAQs (FAQ) auf Global NPM -Modulabhängigkeiten Fragen
Probleme mit der Abhängigkeit von Global NPM Modul sind ein häufiges Problem, auf das Entwickler bei der Installation des node.js -Pakets weltweit begegnen. Dieses Problem tritt auf, wenn das installierte globale Paket nicht auf die lokal installierten Abhängigkeiten zugreifen kann. Dies kann zu Fehlern und Problemen in der Funktionalität der Anwendung führen. Das Problem ist auf die Art und Weise zurückzuführen, wie Node.js das Modell der Modul analysiert, was für Entwickler sehr komplex und verwirrend sein kann.
Es gibt verschiedene Möglichkeiten, um das globale Problem der Abhängigkeit von NPM -Modul zu lösen. Eine der effektivsten Möglichkeiten besteht darin, das Paket lokal und nicht global zu installieren. Dies stellt sicher, dass das Paket Zugriff auf alle Abhängigkeiten hat. Eine andere Möglichkeit besteht darin, den Befehl npm link
zu verwenden, der eine symbolische Verbindung zwischen dem globalen Paket und seinen lokalen Abhängigkeiten herstellt. Auf diese Weise können globale Pakete auf ihre Abhängigkeiten zugreifen, sobald sie weltweit installiert sind.
Wenn Sie das node.js -Paket global installieren, wird es am zentralen Standort Ihres Systems installiert und kann von allen Node.js -Anwendungen zugegriffen werden. Wenn Sie das Paket vor Ort installieren, ist es jedoch im Verzeichnis node_modules
Ihres aktuellen Projekts installiert, und nur dieses Projekt kann darauf zugreifen. Obwohl die globale Installation bequem ist, kann dies zu Problemen mit dem globalen NPM -Modul zu Problemen führen.
npm link
und wie funktioniert es? npm link
ist ein Tool, das von NPM bereitgestellt wird, um symbolische Verbindungen zwischen globalen Paketen und ihren lokalen Abhängigkeiten zu erstellen. Wenn Sie in dem Verzeichnis des Pakets npm link
ausführen, erstellt es einen symbolischen Link aus dem globalen node_modules
-Verzeichnis zum lokalen Paket. Auf diese Weise können globale Pakete auf ihre Abhängigkeiten zugreifen, sobald sie weltweit installiert sind.
Das globale Problem der Abhängigkeit von NPM -Modul wird durch die Art und Weise verursacht, wie Node.js das Modell der Modul anhält. Wenn das Paket global installiert ist, sucht Node.js nach seinen Abhängigkeiten im globalen node_modules
-Verzeichnis. Wenn die Abhängigkeiten jedoch lokal installiert sind, können Node.js sie nicht finden, was zu Problemen mit globalen NPM -Modulabhängigkeiten führt.
Ja, eine der effektivsten Möglichkeiten, um Probleme mit dem globalen NPM -Modulabhängigkeiten zu vermeiden, besteht darin, das Paket immer lokal zu installieren. Dies stellt sicher, dass diese Pakete Zugriff auf alle ihre Abhängigkeiten haben. Dies ist jedoch möglicherweise nicht immer praktisch oder bequem, insbesondere wenn Sie das Paket in mehreren Projekten verwenden müssen.
Ja, es gibt mehrere Tools und Pakete, mit denen Sie Ihre Node.js -Abhängigkeiten verwalten können. Zum Beispiel bietet NPM selbst mehrere Befehle wie npm install
, npm update
und npm outdated
, mit denen Sie Ihre Abhängigkeiten verwalten können. Es gibt auch Tools von Drittanbietern wie Garn und Greenkeeper, die zusätzliche Funktionen bieten.
Wenn das Problem der Global NPM -Modulabhängigkeit nicht behoben ist, kann dies zu Fehlern und Problemen in der Anwendungsfunktionalität führen. Es macht es auch schwierig, Abhängigkeiten zu verwalten und zu aktualisieren, was zu potenziellen Sicherheitsrisiken und veralteten Paketen führt.
Ja, die Abhängigkeit von globalem NPM -Modul können sich auf die Anwendungsleistung auswirken. Wenn das Paket nicht auf seine Abhängigkeiten zugreifen kann, kann es nicht ordnungsgemäß oder effizient ausgeführt werden. Dies kann Leistungsprobleme und Fehler in der Anwendung verursachen.
Sie können den Befehl npm list
verwenden, um zu überprüfen, ob das Paket global oder lokal installiert ist. Wenn Sie npm list -g
ausführen, werden alle global installierten Pakete angezeigt. Wenn Sie im Verzeichnis des Projekts npm list
ausführen, werden alle für das Projekt lokal installierten Pakete angezeigt.
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Global NPM -Modulabhängigkeitsproblem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!