Installieren Sie NPM mit dem Distributionsknotenpaket (Ubuntu) im Ausgangsverzeichnis.


90

Ich möchte die Distribution Node.js-Pakete (oder das chris-lea ppa für neuere Versionen) verwenden, aber NPM in meinem Home-Verzeichnis installieren.

Dies mag wählerisch erscheinen, aber es ist eine ziemlich idiomatische Möglichkeit für Entwickler, die Polyglot / Github verwenden, Sprachlaufzeit- / Bibliotheksumgebungen unter Linux einzurichten: Distributionspakete für die Laufzeit, Bibliotheken von Drittanbietern in einer Umgebung pro Benutzer (siehe virtualenv, RVM - RVM wird auch Ruby für Sie erstellen, wenn Sie wollen). Bei Bedarf werde ich den Knoten lokal erstellen, aber es ist eine PITA, da der Knoten für viele Projekte zu einer zufälligen Entwicklungsanforderung wird.


Antworten:


197

NPM installiert bereits lokale Pakete in Ihren Projekten, aber ich halte das System trotzdem gerne von den Dateien meines Betriebssystems fern. So schlage ich vor, Nodejs-Pakete zu unterteilen:

Installieren Sie Nodejs und NPM über das Chris-Lea-PPA. Dann habe ich in meinem Homedir einen Paketstamm eingerichtet, der die "globalen" Node-Pakete enthält:

 $ NPM_PACKAGES="$HOME/.npm-packages"
 $ mkdir -p "$NPM_PACKAGES"

Stellen Sie NPM so ein, dass dieses Verzeichnis für die Installation globaler Pakete verwendet wird:

 $ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc

Konfigurieren Sie PATH und MANPATH so, dass Befehle in Ihrem Präfix $ NPM_PACKAGES angezeigt werden, indem Sie Ihrer .zshrc / .bashrc Folgendes hinzufügen:

# NPM packages in homedir
NPM_PACKAGES="$HOME/.npm-packages"

# Tell our environment about user-installed node tools
PATH="$NPM_PACKAGES/bin:$PATH"
# Unset manpath so we can inherit from /etc/manpath via the `manpath` command
unset MANPATH  # delete if you already modified MANPATH elsewhere in your configuration
MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

# Tell Node about these packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"

Wenn Sie dies tun npm install -g, installiert NPM die Bibliotheken in ~/.npm-packages/lib/node_modulesund verknüpft ausführbare Tools mit ~/.npm-packages/binIhren Bibliotheken PATH.

Verwenden npm install -gSie einfach wie gewohnt:

[justjake@marathon:~] $ npm install -g coffee-script
... (npm downloads stuff) ...
/home/justjake/.npm-packages/bin/coffee -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/coffee
/home/justjake/.npm-packages/bin/cake -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/cake
coffee-script@1.3.3 /home/justjake/.npm-packages/lib/node_modules/coffee-script

[justjake@marathon:~] $ which coffee
/home/justjake/.npm-packages/bin/coffee

2
Wenn Sie sich auf einem freigegebenen System befinden, auf dem nodeinstalliert npmist, das jedoch nicht installiert ist, befolgen Sie die Anweisungen in der obigen Antwort npm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh, um sich npmselbst in Ihrem Home-Verzeichnis zu installieren.
Tim Lewis

1
Der Satz des Präfix funktioniert nicht für mich auf npm 2.10.1, so dass ich am Ende liefnpm config set prefix $NPM_PACKAGES
Calin

Das folgende Skript behauptet, dies zu automatisieren: github.com/glenpike/npm-g_nosudo
Mike R

Ich benutze $HOME/.localstattdessen für das Präfix. Es ist ein häufig verwendeter Ordner, der heutzutage von anderer Software zum Speichern lokaler Dateien verwendet wird.
Vaibhav K

2
Wenn Sie: verwenden echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc, ist der Pfad nicht fest codiert .npmrc, aber npm liest ihn bei jeder Ausführung von npm aus der Umgebungsvariablen (Hinweis, den ich geändert habe ", 'um zu verhindern, dass die Shell, die das Echo ausführt, die Variable erweitert und {}um die Variable herum hinzugefügt hat , da dies die Syntax ist, die in verwendet wird .npmrc. Damit dies funktioniert, musste ich Folgendes ändern .bashrc, um export NPM_PACKAGES="$HOME/.npm-packages"Folgendes zu lesen : . Hinzufügen der exportmacht es für npm verfügbar. Unabhängig davon, denke ich, müssten Sie auch exportdie anderen Variablen hinzufügen .
Matthijs Kooijman

29

Jakes Antwort wurde 2012 veröffentlicht und verweist auf Chris Leas Node.js PPAs, die seit März 2015 nicht mehr aktualisiert wurden.

Hier sind die Schritte, mit denen ich Node.js und npm in meinem Home-Verzeichnis installiere:

Installieren Sie Node.js mit nvm (nicht sudoerforderlich):

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.bashrc
nvm install 7
npm install -g npm  # update npm

Jetzt kannst du install -gohnesudo und alles geht rein~/.nvm/

Oder installieren Sie Node.js ohne nvm ( offizielle Anweisungen) ):

Installieren Sie Node.js.

  • Node.js v6 (aktuelles LTS ab Mai 2017):

    curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
    sudo apt-get install -y nodejs
  • Node.js v7:

    curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
    sudo apt-get install -y nodejs

Ändern Sie das Standardverzeichnis von npm in ein lokales:

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH="$HOME/.npm-global/bin:$PATH"  # ← put this line in .bashrc
source ~/.bashrc  # if you only updated .bashrc

Alternativ ersetzen .npm-global durch das Verzeichnis Ihrer Wahl .

Aktualisieren Sie npm und überprüfen Sie, ob es in Ihrem $HOMEVerzeichnis installiert ist :

$ npm install npm -g
/home/<username>/.npm-global/bin/npm -> /home/<username>/.npm-global/lib/node_modules/npm/bin/npm-cli.js
/home/<username>/.npm-global/lib
└─┬ npm@3.10.6 
  ├─┬ glob@7.0.5 
   └── minimatch@3.0.2 
  ├── npm-user-validate@0.1.5 
  └── rimraf@2.5.3 

Jetzt können Sie install -gohne sudound ohne Probleme mit Ihren Systemdateien.


Die zweite Option wird auch auf der NPM-Dokumentenseite beschrieben: docs.npmjs.com/getting-started/…
Vadim

6

Die von Just Jake veröffentlichte Lösung ist großartig. Aufgrund eines Fehlers mit npm> 1.4.10 funktioniert es jedoch möglicherweise nicht wie erwartet. (Siehe dies und das )

Während der Fehler behoben ist, können Sie ein Downgrade auf npm 1.4.10 durchführen, indem Sie die folgenden Schritte ausführen:

  1. Kommentieren Sie die Präfixzeile in Ihrem $ HOME / .npmrc
  2. Lauf sudo npm install -g npm@1.4.10
  3. Stellen Sie sicher, dass die richtige Version von npm installiert ist ( npm --version)
  4. Kommentieren Sie die Präfixzeile in Ihrem $ HOME / .npmrc aus
  5. Fahren Sie fort, um Ihre globalen Pakete in Ihrem Home-Ordner zu installieren!.

4

Da Python hat schon einen guten Job virtualenv, ich benutze nodeenv. Im Vergleich dazu nvmkönnen Sie mehrere Umgebungen für dieselbe Knotenversion erstellen (z. B. zwei Umgebungen für Knoten, 0.10jedoch mit unterschiedlichen Paketsätzen).

ENVNAME=dev1

#  create an environment
python -m virtualenv ${ENVNAME}

# switch to the newly created env
source ${ENVNAME}/bin/activate

# install nodeenv
pip install nodeenv

# install system's node into virtualenv
nodeenv --node=system --python-virtualenv

Die Readme-Datei ist ziemlich gut: https://github.com/ekalinin/nodeenv


3

Ich habe einige Zeit die @ just-jake- Lösung verwendet und festgestellt, dass nvm einfacher einzurichten ist. Es ist auch eine sehr leistungsstarke Lösung, mit der verschiedene Versionen von installiert und verwendet werden können nodejs.

Unter Ubuntu 14.04 oder 16.04:

  1. Installieren Sie die erforderlichen Pakete für die Erstellung nodejs:

    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
  2. Installiere nvm :

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash

    Falls eine neuere Version von nvm verfügbar sein wird, finden Sie den aktuellen Installationsbefehl auf nvm Site.

  3. nvmDas Installationsprogramm fügt ein Bootstrap-Skript hinzu ~/.bashrc, sodass Sie entweder das Terminal erneut öffnen müssen, um es auszuführen, oder Folgendes tun müssen:

    source ~/.bashrc
  4. Jetzt können Sie alle installieren nodejs Version , zwischen ihnen wechseln usw.

    Verwenden nvm ls-remote diese Option, um verfügbare nodejsVersionen aufzulisten.

    So installieren Sie beispielsweise nodejsv4.2.4:

    # install v4.2.4
    nvm install v4.2.4 
    # use nodejs v4.2.4 in the current terminal session
    nvm use v4.2.4
    # use v4.2.4 by default in new terminal session
    nvm alias default v4.2.4

2

Um die Antwort von Just Jake und user1533401 zu erweitern: Ich kann kein Downgrade durchführen, da ich Shared Hosting verwende und der Knoten in einem Systemverzeichnis installiert ist. Aus diesem Grund habe ich auch das Verzeichnis geändert, in dem npm globale Skripte installiert, wenn ich dies möchte. Für diejenigen im selben Boot ist hier eine weitere vorübergehende Lösung, die ich gefunden habe:

npm install -g --prefix=$(npm config get prefix) <package>

Der Fehler ist, dass npm Ihre Konfigurationsdatei pro Benutzer nicht liest, sondern jedes Mal, wenn Sie ein globales Skript installieren, dies behebt. Gefunden hier .



0

Andere Antworten haben veraltete Lösungen: Die Lösung von 2020 verwendet NPM_CONFIG_PREFIXUmgebungsvariablen. (Siehe Details )

Beispielsweise,

$ NPM_CONFIG_PREFIX="$HOME/.npm-packages" npm install -g ios-sim
/Users/<name>/.npm-packages/bin/ios-sim -> /Users/<name>/.npm-packages/lib/node_modules/ios-sim/bin/ios-sim
+ ios-sim@9.0.0
added 108 packages from 68 contributors in 3.094s
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.