Chciałbym użyć pakietów dystrybucyjnych Node.js (lub chris-lea ppa dla nowszych wersji), ale zainstalować NPM w moim katalogu domowym.
Może się to wydawać wybredne, ale jest to dość idiomatyczny sposób dla programistów korzystających z polyglot / github na konfigurację środowisk wykonawczych / bibliotek języka w systemie Linux: pakiety dystrybucji dla środowiska wykonawczego, biblioteki innych firm w środowisku dla każdego użytkownika (patrz virtualenv, RVM - RVM jeśli chcesz, stworzy też Rubiego). W razie potrzeby zbuduję węzeł lokalnie, ale jest to PITA, ponieważ Node staje się przypadkowym wymaganiem programistycznym dla wielu projektów.
Odpowiedzi:
NPM zainstaluje już lokalne pakiety w twoich projektach, ale nadal lubię trzymać system z dala od plików mojego systemu operacyjnego. Oto, jak sugeruję podział pakietów Nodejs:
Zainstaluj Nodejs i NPM za pośrednictwem chris-lea PPA. Następnie ustawiłem katalog główny pakietu w moim katalogu domowym, aby przechowywać pakiety „globalne” Node:
$ NPM_PACKAGES="$HOME/.npm-packages" $ mkdir -p "$NPM_PACKAGES"
Ustaw NPM, aby używał tego katalogu do instalacji pakietów globalnych:
$ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc
Skonfiguruj PATH i MANPATH, aby wyświetlić polecenia w prefiksie $ NPM_PACKAGES, dodając następujące elementy do pliku .zshrc / .bashrc:
# 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"
Teraz, gdy wykonasz operację
npm install -g
, NPM zainstaluje biblioteki~/.npm-packages/lib/node_modules
i połączy narzędzia wykonywalne, do~/.npm-packages/bin
których znajduje się plikPATH
.Po prostu użyj
npm install -g
tak jak zwykle:[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
źródło
node
jest zainstalowany, alenpm
nie jest, należy wykonać instalację w powyższej odpowiedzi, a następnienpm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh
dostać sięnpm
sam zainstalować w swoim katalogu domowym.npm config set prefix $NPM_PACKAGES
$HOME/.local
Zamiast tego używam przedrostka. Jest to obecnie powszechnie używany folder przez inne oprogramowanie do przechowywania plików lokalnych.echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc
:, ścieżka nie jest zakodowana na stałe.npmrc
, ale npm odczyta ją ze zmiennej środowiskowej za każdym razem, gdy npm zostanie uruchomiona (uwaga zmieniłem"
na'
, aby zapobiec rozwinięciu zmiennej przez powłokę wykonującą echo i dodałem{}
wokół zmiennej , ponieważ jest to składnia używana w.npmrc
. Aby to działało, musiałem zmienić,.bashrc
aby przeczytać:export NPM_PACKAGES="$HOME/.npm-packages"
.Dodanieexport
sprawia, że jest on dostępny dla npm. Niepowiązane, myślę, że musiałbyś dodaćexport
również inne zmienne.Odpowiedź Jake'a została opublikowana w 2012 roku i chociaż jest przydatna, odnosi się do umów PPA Chrisa Lei Node.js, które nie są już aktualizowane od marca 2015 roku.
Oto kroki, których używam, aby zainstalować Node.js i npm w moim katalogu domowym:
Zainstaluj Node.js z nvm (nie jest
sudo
wymagane):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
Teraz możesz
install -g
bezsudo
i wszystko wchodzi~/.nvm/
Lub zainstaluj Node.js bez nvm ( oficjalne instrukcje ):
Zainstaluj Node.js.
Node.js v6 (obecny LTS od maja 2017):
Node.js v7:
Zmień domyślny katalog npm na lokalny:
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
Alternatywnie wymienić
.npm-global
wybranym katalogiem.Zaktualizuj npm i sprawdź, czy jest zainstalowany w Twoim
$HOME
katalogu:Teraz możesz
install -g
bezsudo
i bez ingerowania w pliki systemowe.źródło
Rozwiązanie opublikowane przez Just Jake jest świetne. Jednak z powodu błędu z npm> 1.4.10 może nie działać zgodnie z oczekiwaniami. (Zobacz to i to )
Po usunięciu błędu możesz przejść na starszą wersję do npm 1.4.10, wykonując następujące kroki:
sudo npm install -g [email protected]
npm --version
)źródło
Ponieważ Python już wykonuje świetną robotę
virtualenv
, używamnodeenv
. W porównaniu donvm
, można utworzyć wiele środowisk dla tej samej wersji węzła (np. Dwa środowiska dla węzła,0.10
ale z różnymi zestawami pakietów).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
Plik Readme jest całkiem niezły: https://github.com/ekalinin/nodeenv
źródło
Używałem rozwiązania @ just-jake przez jakiś czas i stwierdziłem, że nvm jest łatwiejsze w konfiguracji. Jest to również potężne rozwiązanie, które pozwala na instalację i używanie różnych wersji
nodejs
.W systemie Ubuntu 14.04 lub 16.04:
Zainstaluj wstępnie wymagane pakiety do tworzenia
nodejs
:Zainstaluj nvm :
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
W przypadku gdy będzie dostępna nowsza wersja nvm, aktualne polecenie instalacji można znaleźć na stronie nvm .
nvm
instalator doda skrypt bootstrap do~/.bashrc
, więc musisz albo ponownie otworzyć terminal, aby go uruchomić, albo zrobić:Teraz możesz zainstalować dowolny
nodejs
wersję, przełączać się między nimi itp.Posługiwać się
nvm ls-remote
aby wyświetlić listę dostępnychnodejs
wersji.Aby zainstalować na przykład
nodejs
wersję 4.2.4 , wykonaj następujące czynności:# 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
źródło
Aby rozwinąć odpowiedź udzieloną przez Just Jake i user1533401: Nie mogę przejść na starszą wersję, ponieważ używam hostingu współdzielonego, a węzeł jest zainstalowany w katalogu systemowym. Dlatego też zmieniłem katalog, w którym npm instaluje globalne skrypty, jeśli chcę, żeby to zrobiło. Dla tych, którzy są na tej samej łodzi, oto kolejna tymczasowa poprawka, która działa:
npm install -g --prefix=$(npm config get prefix) <package>
Błąd polega na tym, że npm nie odczytuje pliku konfiguracyjnego dla użytkownika, ale określanie go za każdym razem, gdy instalujesz skrypt globalny, rozwiązuje ten problem. Znaleziono tutaj .
źródło
Jak już wspomniano tutaj i tutaj
npm config set prefix ~ echo export PATH=\$PATH:\~/bin >> ~/.bashrc . ~/.bashrc
źródło
Inne odpowiedzi mają przestarzałe rozwiązania: rozwiązanie 2020 wykorzystuje
NPM_CONFIG_PREFIX
zmienną środowiskową. (Zobacz szczegóły )Na przykład,
$ 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 + [email protected] added 108 packages from 68 contributors in 3.094s
źródło