Gdzie należy zainstalować moje moduły npm w systemie Mac OS X?

84

Próbowałem przeprowadzić aktualizację phonegapprzez, npmkiedy zacząłem mieć kłopoty. Krótko mówiąc, node_modulesna moim komputerze są dwa katalogi.

/usr/local/lib/node_modules
/usr/local/share/npm/lib/node_modules

Po uruchomieniu npm upgrade -g phonegapwydaje się, że npmaktualizuje kopię pakietu, który znajduje się w /usr/local/lib/node_modules. Jeśli jednak which phonegapstwierdzę, że link symboliczny wskazuje na starszą instalację pod adresem /usr/local/share/npm/lib/node_modules.

Ponadto, gdy próbuję zainstalować samodzielny pakiet express, na przykład pliki są instalowane w /usr/local/lib/node_moduleskatalogu, ale w żadnym miejscu nie jest tworzone żadne dowiązanie symboliczne do pliku wykonywalnego $PATH.

Dwa pytania:

  • Jaki jest właściwy katalog dla modułów węzłów w systemie Mac OS X?
  • Jak mogę skonfigurować npmłącze do plików wykonywalnych w moim $PATHpodczas instalowania oprogramowania?

Punkty dodatkowe: czy metoda instalacji nodewpływa na konfigurację? Istnieje wiele opcji .


EDYCJA : Dowiedziałem się, że dowiązania symboliczne są tworzone w moim /usr/local/bin, ale mój .bash_profilezostał skonfigurowany z /usr/local/share/npm/binwyprzedzeniem /usr/local/binw moim $PATH. Niewyraźnie pamiętam, jak w pewnym momencie dodałem tę ścieżkę do mojego profilu, ale nie wiem dlaczego.

Pojawia się więc pytanie: jak skończyłem z dwoma różnymi node_moduleskatalogami na moim komputerze i dlaczego chciałbym mieć mój node_modulesw share/npm/libpodkatalogu zamiast bezpośrednio w /usr/local/lib?

Ben Harold
źródło

Odpowiedzi:

117

/usr/local/lib/node_modules to poprawny katalog dla globalnie zainstalowanych modułów węzłów.

/usr/local/share/npm/lib/node_modulesnie ma dla mnie sensu. Jednym z problemów jest to, że jesteś zdezorientowany, ponieważ istnieją dwa katalogi o nazwie node_modules :

/usr/local/lib/node_modules
/usr/local/lib/node_modules/npm/node_modules

Te ostatnie wydają się być modułami węzłów dostarczonymi z Node, np. lodashGdy pierwszy jest modułami Node, które zainstalowałem przy użyciu npm.

Thomas David Kehoe
źródło
1
Jaka jest różnica między tymi dwoma węzłami? Dla użytkowników OS X zaleca się, aby podczas instalacji używać tego z węzła. Czy lepiej przejść na właściwą instalację npm?
alicia
2
Zainstalowany npm2 z macports, twoje ścieżki są nieobecne w tych lokalizacjach, również jako nieobecne w / opt / local / share ..
holms
71

Drugi Thomas David Kehoe , z następującym zastrzeżeniem -

Jeśli używasz menedżera wersji węzła (nvm), twoje globalne moduły węzłów będą przechowywane w dowolnej wersji węzła, której używasz w momencie zapisywania modułu.

A więc ~/.nvm/versions/node/{version}/lib/node_modules/.

ginna
źródło
6
Dokładnie to, czego szukałem.
ap_snitch,
59
npm root -g

aby sprawdzić globalną lokalizację npm_modules

lazyTank
źródło
6

Jeśli chcesz poznać lokalizację swoich pakietów NPM, powinieneś:

which npm // locate a program file in the user's path SEE man which
// OUTPUT SAMPLE
/usr/local/bin/npm
la /usr/local/bin/npm // la: aliased to ls -lAh SEE which la THEN man ls
lrwxr-xr-x  1 t04435  admin    46B 18 Sep 10:37 /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js

Biorąc więc pod uwagę, że npm sam jest pakietem NODE, jest on instalowany w tej samej lokalizacji, co inne pakiety ( EUREKA ). Tak więc, aby potwierdzić, powinieneś wejść do node_modules i wyświetlić katalog.

cd /usr/local/lib/node_modules/
ls
#SAMPLE OUTPUT
@angular npm .... all global npm packages installed

LUB

npm root -g

Zgodnie z komentarzem @anthonygore

T04435
źródło
5
Łatwiej: npm root -g
anthonygore
1
dla mnie npm root -gi which npmnie dało takich samych wyników. Chciałem odinstalować expo-clii udało mi się usunąć expoi expo-clikatalogi z /usr/local/bin/npm. Dziękuję @ T04435!
Aleksandar