Ich liebe Bundler , es ist großartig im Abhängigkeitsmanagement. Ich liebe npm , die Installation von Knotenpaketen ist einfach! Ich habe eine NodeJS-App und würde gerne meine Apps-Abhängigkeiten angeben und sie einfach installieren / aktualisieren können, wo immer ich meine App bereitstelle. Dies ist keine Bibliothek, die ich veröffentliche, sondern eine vollwertige Web-App.
Ich kenne den npm bundle
Befehl, aber das scheint einfach das Verzeichnis zu überschreiben, in dem Pakete installiert sind.
Ich bin es gewohnt, Bundler auf diese Weise zu verwenden:
# Gemfile
gem "rails", "3.0.3"
Installiert Rails v3.0.3 und andere erforderliche Edelsteine nur dann auf dem Host-Computer, wenn sie noch nicht vorhanden sind
> bundle install
Wie kann ich mit npm etwas Ähnliches erreichen?
javascript
dependencies
node.js
bundler
npm
Daniel Beardsley
quelle
quelle
Antworten:
Ab npm 1.0 (was Sie jetzt standardmäßig erhalten, wenn Sie die Schritte in der README-Datei ausführen) ist "Bundle" keine getrennte Sache mehr - es ist nur "wie es funktioniert".
So:
package.json
Datei im Stammverzeichnis Ihres Projekts abListen Sie Ihre Deps in dieser Datei auf
npm install
Da Sie dies ohne Argumente und nicht im globalen Modus aufrufen, werden nur alle Ihre Deps lokal installiert.require("express")
und sei glücklich.quelle
your_app/node_modules
Verzeichnis in einen Symlink außerhalb Ihres App-Verzeichnisses zu ändern . Sie möchten nicht bei jeder Bereitstellung jede Abhängigkeit herunterladen, erstellen und installieren müssen.my-project
in./node_modules/my-project/node_modules
. Ich bin mir nicht sicher, ob es eine bequeme Möglichkeit gibt, alle Abhängigkeiten in./node_modules
Anyone zu installieren .Bearbeiten: Dies gilt nur für npm-Versionen <1.0
Es war ziemlich schwierig, das herauszufinden, aber NPM macht dies möglich .
Sie benötigen drei Komponenten
deps/
)package.json
Datei im obigen Verzeichnis, in der Abhängigkeiten aufgelistet sindindex.js
Datei im obigen Verzeichnis, die Ihre Abhängigkeiten erfordertBeispiel
Stellen Sie sich vor, Express ist Ihre einzige Abhängigkeit
deps / package.json
Hinweis: Erhöhen Sie die Versionsnummer jedes Mal, wenn Sie die Abhängigkeiten ändern
deps / index.js
Jetzt sollten Sie in der Lage sein, Ihre Abhängigkeiten mit npm zu installieren. Sie können diesen Teil sogar in Ihren Bereitstellungsprozess einbeziehen
Dann können Sie in Ihrem App-Code wie folgt auf Ihre spezifische Express-Version zugreifen:
quelle
require('express')
Würden die in deps / index.js nicht einfach die neueste Express-Version importieren und nicht unbedingt die, die wir installiert haben? Ich bin ein NodeJS Noob, also bitte ertrage es mit mir.npm install
, es fügt Symlinks im Verzeichnis Ihres installierten Pakets zu den richtigen Versionen abhängiger Pakete hinzu. Wenn Ihr Abhängigkeitspaket erforderlich ist, wird dasrequire('express')
überprüft das zuerst das lokale Verzeichnis und findet den Symlink zur richtigen Version von Express.Sie sollten diese beiden Artikel aus dem Isaacs-Blog (Autor npm) lesen. Ich denke, sie sind wirklich gut und ich glaube, sagen Sie, wie Sie Ihr Ziel erreichen können:
Ich glaube, Link Nr. 1 (Punkt Nr. 11) erklärt dies:
quelle
npm bundle
es verwendet, um alle Ihre Abhängigkeiten in einem anderen Verzeichnis als dem Standardverzeichnis zu sammeln. Ich werde wahrscheinlich meine eigene Lösung finden, die ähnlich funktioniert wiebundle install
(bundler
für Ruby)npm
Version 1.0+,npm bundle
wurde entfernt. Verwenden Sie stattdessen einfach dennpm install
Befehl ohne Paketnamen. Er liest die Datei package.json und ruft die erforderlichen Pakete auf.Ab Npm Version 1.1.2 gibt es einen neuen Befehl , der analog zu
npm shrinkwrap
einenpm-shrinkwrapped.json
Datei erstelltGemfile.lock
. Es ist wichtig, eine zu erstellen , um Softwarefäule zu verhindern (siehe Bundlers Begründung ). Zumal Nodejs eine so schnelllebige Community hat.Während
bundle install
einGemfile.lock
automatisch erstellt wird,npm install
wird nicht erstelltnpm-shrinkwrapped.json
(wird aber verwendet, wenn es vorhanden ist). Daher müssen Sie daran denken, zu verwendennpm shrinkwrap
.Lesen Sie eine vollständige Anleitung unter http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
quelle
Es scheint mir, dass die einfachste Lösung darin besteht, eine
package.json
Datei zu verwenden, derenprivate
Flag (erst letzten Monat zu npm hinzugefügt) gesetzt isttrue
. Auf diese Weise können Sie die Abhängigkeiten Ihres Projekts ausführennpm install
odernpm bundle
abrufen, aber Sie verhindern, dass jemand versehentlich Ihr nicht öffentliches Projekt veröffentlicht.Hier ist ein Beispiel
package.json
:Running
npm install
wirdexpress
auf dem lokalen System installiert , sofern es noch nicht vorhanden ist. Laufennpm publish
gibt einen Fehler wegen der"private": true
.Sie und Ihr Team können das Versions-Tag intern verwenden, um Abhängigkeitsänderungen im Laufe der Zeit zu verfolgen. Jedes Mal, wenn Sie eine Abhängigkeit ändern, stoßen Sie die Version an. Verwenden Sie, um zu sehen, welche Version Sie installiert haben
npm ls installed
.quelle
true
und dass es nur funktioniert, weil Zeichenfolgen wahrheitsgemäße Werte sind (das heißt!!"false" === true
).Veröffentlichen Sie Ihre App mit
npm
und listen Sie die Abhängigkeiten in Ihrer Datei package.json auf.Wenn jemand
npm
Ihr Paket installiertnpm
, kümmert er sich um die Auflösung seiner Abhängigkeiten.Paketspezifikation: http://wiki.commonjs.org/wiki/Packages/1.0
quelle
npm
vor der Installation Ihrer App installieren können. Ich glaube nicht, dass es ein anderesgem
Äquivalent für node.js gibt.