2017-02-14 4 views
3

Ich bin ein wenig verwirrt mit wie webpack funktioniert. Wenn Sie in Ihrem Root-Director npm install examplePackage ausführen, installiert das dann das Paket auf Ihrer Festplatte? Dann bedeutet das, dass Sie dieses Paket jederzeit in jede Datei importieren können? Wie unterscheidet sich das als in Ihrem Projekt statt? Liegt es daran, dass wenn du dein Projekt nach Github schubst, es ein package.json geben wird, damit andere Leute ihnen folgen und sicherstellen, dass sie auch die notwendigen Bibliotheken haben, um deine App laufen zu lassen? Woher weiß der Knoten, ob er Ihr Projekt für ein Paket oder Ihre Festplatte durchsucht? Überprüft es zuerst Ihre Bibliothek und dann, wenn es nicht gefunden wird, wird es auf Ihrer Festplatte aussehen?Globale webpack installieren vs. projektspezifische webpack installieren

Antwort

3

npm install examplePackage wird das Paket in node_modules des aktuellen Verzeichnisses installieren. Wenn Sie ein Modul in Node.js mit require('examplePackage') prüft er zuerst importieren, wenn es ein Kernmodul (z fs). Wenn es kein Kernmodul ist, sucht es in node_modules des aktuellen Verzeichnisses. Wenn das Modul nicht in diesem Verzeichnis gefunden wird, wird es in das übergeordnete Verzeichnis verschoben und überprüft das Verzeichnis node_modules. Und so weiter, bis das Modul gefunden wurde oder der Root des Dateisystems erreicht ist. Siehe https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders

Das bedeutet in der Tat, dass Sie ein Paket, das in / installiert wurde, von überall in Ihrem Dateisystem importieren können. Obwohl es möglich wäre, alle Abhängigkeiten einfach in / zu installieren, gibt es viele Vorteile projektabhängiger Abhängigkeiten. Wahrscheinlich ist der größte Vorteil, dass Sie Ihr Projekt leicht mit anderen teilen können und Sie können sicher sein, dass es für sie funktioniert (unter der Annahme einer kompatiblen Node.js-Version).

Woher weiß der Knoten, ob er Ihr Projekt für ein Paket oder Ihre Festplatte durchsucht?

Es sieht nur auf Ihrer Festplatte, speziell in den node_modules Verzeichnissen wie oben erwähnt. Wie Sie bemerkt haben, können Sie die Abhängigkeiten in package.json angeben, aber der Knoten selbst tut nichts mit diesen Informationen. Stattdessen müssen Sie npm install ausführen, dies wird alle aufgelisteten Abhängigkeiten in package.json installieren. Danach können Sie diese Module korrekt importieren.

Hinweis:npm install examplePackage nicht hinzufügen examplePackage zu Ihrem package.json, installiert es einfach. Wenn Sie es als Abhängigkeit hinzufügen möchten, verwenden Sie npm install --save examplePackage oder als devDependency mit npm install --save-dev examplePackage. https://docs.npmjs.com/cli/install

CLI

Kommandozeilen-Tools oder Pakete in der Regel mit ausführbaren Dateien, wie webpack, in node_modules/.bin und zur Verfügung stehen, um sie auszuführen, haben sie entweder direkt in Ihrem Shell PATH oder genannt werden. Da es sehr häufig ist, dass ein Projekt lokal ausführbare Dateien installiert Anrufe, können Sie sie im scripts Abschnitt der package.json ohne sie mit node_modules/.bin prefixing verwenden. Zum Beispiel webpack laufen könnten Sie ein Skript definieren:

"scripts": { 
    "build": "webpack" 
} 

Und dann npm run build laufen stattdessen ./node_modules/.bin/webpack laufen zu haben. Weitere Informationen zu Skripten: https://docs.npmjs.com/misc/scripts

+0

Wenn Sie 'npm webpack -g' installieren und' npm build' ausführen, funktioniert es nicht, weil es nicht lokal in Ihrem Projekt installiert ist?Wenn Sie den Skriptabschnitt wie den oben in der Datei package.json beschriebenen verwenden, kann er weiterhin das Webpack in Ihrem Stammverzeichnis finden? – stackjlei

+0

Es wird funktionieren, wenn es in der PATH Ihrer Shell ist. Global installierte (mit '-g') Pakete sollten sich in Ihrem' PATH' befinden (die meisten Node.js-Installationen werden es tun oder Ihnen sagen, wie es geht). –