Czy zmienić domyślny globalny katalog instalacyjny dla modułów node.js w systemie Windows?

134

W mojej instalacji systemu Windows PATHzawiera C:\Program Files\nodejs, gdzie node.exejest plik wykonywalny . Jestem w stanie wystartować nodez powłoki, jak również npm. Chciałbym również zainstalować nowe pliki wykonywalne C:\Program Files\nodejs, ale wydaje się to niemożliwe.

Ustawienia NODE_PATHi NODE_MODULESzmienne niczego nie zmieniają: rzeczy są nadal %appdata%\npmdomyślnie instalowane .

Jak mogę zmienić globalną ścieżkę instalacji?

gremo
źródło
5
Prawdopodobnie dlatego, że gremo chce mieć wszystkie zależności związane z nodejs w jednym miejscu. Problem w tym, że aktualizując nodejs, stracisz wszystkie zainstalowane pakiety. Z drugiej strony umieszczenie npm w folderze% appdata% użytkownika powoduje, że jest on niedostępny dla innego użytkownika na tym samym komputerze. Pomyśl o instalacji jako zwykły użytkownik kontra administrator.
Volker E.
1
Przeniesienie się z% AppData% do bardziej kontrolowanej lokalizacji ma dla mnie dużo sensu, ponieważ wydaje mi się, że jest to dość% temp% -owe. (Robi to samo dla profili Firefoksa i kilku innych). Jednak C:\Program Filesjest przygotowany na ciągłe problemy z prawami administratora. ➪ Wolałabym się przenieść do D:\my-repository\npmlub tak.
Frank Nocke
2
@WiredPrairie, ponieważ instalacja w folderach użytkownika jest po prostu głupia. Cały sens instalacji pakietów „globalnie” polega na tym, że system jako całość może uzyskać dostęp do tych pakietów.
Michael Trouw
4
Oto powód, aby to zrobić: w mojej sieci nie możesz wykonywać kodu z folderu AppData, ponieważ często w ten sposób pobierane i uruchamiane jest złośliwe oprogramowanie, zwłaszcza CodeLocker. To dodatkowa warstwa ochrony przed złośliwym oprogramowaniem. Ponieważ Node instaluje tam różne rzeczy, nie mogę uruchamiać modułów węzłów bez zmiany miejsca instalacji lub zmniejszenia bezpieczeństwa w moim systemie.
Steve Hiner

Odpowiedzi:

81

Wystarczy przeczytać npm-foldersdokumentację . Nie chcę, aby rozpocząć mój Win notebook teraz więc nie można go zweryfikować, ale trzeba zmienić tylko prefixdo c:\Program Files\nodejszapisania w pliku konfiguracyjnym. Jeśli chcesz zmienić go globalnie dla wszystkich użytkowników, edytuj c:\Program Files\nodejs\npmrcplik, w przeciwnym razie utwórz / edytuj c:\Users\{username}\.npmrc.

Ale ta zmiana prawdopodobnie będzie miała pewne skutki uboczne, więc przeczytaj tę dyskusję wcześniej. Myślę, że twój pomysł nie jest dobry.

ivoszz
źródło
33
Znalazłem npmrcteczkę pod adresemC:\path\to\nodejs\node_modules\npm\npmrc
Volker E.
3
również zmień lokalizację pamięci podręcznej npm na katalog lokalny, używając, npm config set cache <new cache location> --globaljeśli napotkasz problemy podczas instalowania modułów, a pamięć podręczna znajduje się na dysku współdzielonym. Otrzymałem ten błąd, ENOENT: no such file or directorygdy pamięć podręczna znajdowała się na dysku współdzielonym
redDevil
1
Nie zapomnij zaktualizować zmiennej systemowej PATH, aby wskazywała nowy folder npm.
Hayko Koryun
64

próba zainstalowania pakietów globalnych w C:\Program Files (x86)\nodejs\dała mi problemy z uruchomieniem jako administrator , ponieważ npm próbował zainstalować w
C:\Program Files (x86)\nodejs\node_modules\

aby rozwiązać ten problem, zmień globalny katalog instalacyjny na C:\Users\{username}\AppData\Roaming\npm:

w C:\Users\{username}\, utwórz .npmrcplik o zawartości:

prefix = "C:\\Users\\{username}\\AppData\\Roaming\\npm"

odniesienie

środowisko
nodejs x86 instalator w C:\Program Files (x86)\nodejs\systemie Windows 7 Ultimate N 64-bit SP1
node --version: v0.10.28
npm --version: 1.4.10

Jake Berger
źródło
To dziwne, że używałem npm 2.1.6 i instalowałem wszystkie globalne moduły w% appdata% / npm, teraz, gdy zaktualizowałem go do 2.6.1, wciąż próbuje (i kończy się niepowodzeniem) instalacji w c: \ windows \ program files \ .. Czy wiesz, kiedy to zachowanie się zmieniło?
WORMSS
1
oto kilka różnic na wiki węzłów
Jake Berger
wydaje się, że miało to związek z innym sposobem zainstalowania npm. Dzięki za różnicę.
WORMSS
2
npm config ustaw prefiks C: \ Users \ {nazwa użytkownika} \ AppData \ Roaming \ npm
Bernhard Döbler
62

Możesz zobaczyć moją odpowiedź na to pytanie w mojej odpowiedzi na inne pytanie .


W systemie Windows globalna ścieżka instalacji znajduje się w katalogu profilu użytkownika

  • %USERPROFILE%\AppData\Roaming\npm
  • %USERPROFILE%\AppData\Roaming\npm-cache
  • OSTRZEŻENIE: Jeśli wykonujesz zdarzenia czasowe lub inną automatyzację jako inny użytkownik, upewnij się, że działasz npm installjako ten użytkownik. Niektóre moduły / narzędzia powinny być instalowane globalnie.
  • BŁĘDY INSTALATORA: Może być konieczne samodzielne utworzenie tych katalogów lub dodanie ...\npmkatalogu do ścieżki użytkownika.

Aby zmienić „globalną” lokalizację wszystkich użytkowników na bardziej odpowiednią współdzieloną lokalizację globalną %ALLUSERSPROFILE%\(npm|npm-cache)(zrób to jako administrator):

  • utwórz [NODE_INSTALL_PATH]\etc\katalog
    • jest to potrzebne przed podjęciem npm config --global ...działań
  • utwórz globalne (administracyjne) lokalizacje dla modułów npm
    • C:\ProgramData\npm-cache - tutaj trafią moduły npm
    • C:\ProgramData\npm - tutaj zostaną umieszczone binarne skrypty dla modułów zainstalowanych globalnie
    • C:\ProgramData\npm\node_modules - tutaj trafią moduły zainstalowane globalnie
    • odpowiednio ustawić uprawnienia
      • administratorzy: modyfikuj
      • uwierzytelnieni użytkownicy: odczyt / wykonanie
  • Ustaw globalne ustawienia konfiguracji (wiersz polecenia administratora)
    • npm config --global set prefix "C:\ProgramData\npm"
    • npm config --global set cache "C:\ProgramData\npm-cache"
  • Dodaj C:\ProgramData\npmdo zmiennej środowiskowej ścieżki systemu

Jeśli %LOCALAPPDATA%\(npm|npm-cache)zamiast tego chcesz zmienić „globalną” lokalizację użytkownika na ścieżkę:

  • Utwórz niezbędne katalogi
    • C:\Users\YOURNAME\AppData\Local\npm-cache - tutaj trafią moduły npm
    • C:\Users\YOURNAME\AppData\Local\npm - tutaj trafią binarne skrypty dla zainstalowanych modułów
    • C:\Users\YOURNAME\AppData\Local\npm\node_modules - tutaj trafią moduły zainstalowane globalnie
  • Skonfiguruj npm
    • npm config set prefix "C:\Users\YOURNAME\AppData\Local\npm"
    • npm config set cache "C:\Users\YOURNAME\AppData\Local\npm-cache"
  • Dodaj nową ścieżkę npm do pliku środowiska PATH.
    • setx PATH "%PATH%;C:\Users\YOURNAME\AppData\Local\npm"
Tracker1
źródło
1
Ustawienie globalnej lokalizacji na C: \ ProgramData zgodnie z twoją środkową sugestią wydaje się być najlepszym miejscem do tego w środowisku Windows, ale nie widzę, jak ustawić prefiks w globalnym pliku konfiguracyjnym, gdy prefiks jest używany do znajdź globalny plik konfiguracyjny. Ten sam rezultat osiągnąłem edytując wbudowany plik konfiguracyjny C: \ Program Files \ nodejs \ node_modules \ npm \ npmrc, ale podejrzewam, że ta zmiana może zostać na pewnym etapie nadpisana przez aktualizację.
oenpelli
@oenpelli W tym przypadku „global” to .npmrcplik użytkownika w katalogu home / profile. Musiałby być ustawiony dla wszystkich użytkowników.
Tracker1,
Jeśli nie mam uprawnień administratora w systemie Windows, jak mogę zmienić instalację globalną?
liam xu
liam, możesz dostosować to dla swojego użytkownika za pomocą .npmrcpliku w katalogu twojego profilu ... chociaż ymmv w tym momencie.
Tracker1
19

Opierając się na koncepcji instalacji chocolateyi pomyśle zasugerowanym przez @Tracker, udało mi się wykonać następujące czynności i wszyscy użytkownicy systemu Windows byli wtedy zadowoleni ze współpracy z nodejsi npm.

Wybierz C:\ProgramData\nodejsjako katalog instalacyjny dla nodejsi zainstaluj nodejsz dowolnym użytkownikiem będącym członkiem grupy administratorów.

Można to zrobić z czekoladą jako: choco install nodejs.install -ia "'INSTALLDIR=C:\ProgramData\nodejs'"

Następnie utwórz folder o nazwie npm-cachew katalogu głównym katalogu instalacyjnego, którym po wykonaniu powyższych czynności będzie C:\ProgramData\nodejs\npm-cache.

Utwórz folder o nazwie etcw katalogu głównym katalogu instalacyjnego, którym po wykonaniu powyższych czynności będzie C:\ProgramData\nodejs\etc.

Ustaw NODEzmienną środowiskową jako C:\ProgramData\nodejs.

Ustaw NODE_PATHzmienną środowiskową jako C:\ProgramData\nodejs\node_modules.

Upewnij się, że %NODE%zmienna środowiskowa utworzona wcześniej powyżej została dodana (lub jej ścieżka) została dodana do %PATH%zmiennej środowiskowej.

Edytuj %NODE_PATH%\npm\npmrcz następującą zawartościąprefix=C:\ProgramData\nodejs

Z wiersza poleceń ustaw globalną konfigurację w ten sposób ...

npm config --global set prefix "C:\ProgramData\nodejs"

npm config --global set cache "C:\ProgramData\nodejs\npm-cache"

Ważne jest, aby powyższe kroki były wykonywane w kolejności i przed aktualizacją npm ( npm -g install npm@latest) lub próbą zainstalowania dowolnego npmmodułu.

Wykonanie powyższych kroków pomogło nam działać nodejsjako instalacja ogólnosystemowa, łatwo dostępna dla wszystkich użytkowników z odpowiednimi uprawnieniami. Każdy użytkownik może następnie uruchomić nodei npmzgodnie z wymaganiami.

Damilola
źródło
jaki jest wynik działania 'npm config list'. Czy korzystasz z systemu Windows lub Linux?
Damilola
Wypróbowałem to na obu. npm config add prefixdziała, ale żadna z wymienionych tutaj zmiennych środowiskowych. Nie chciałem otwierać kolejnego pytania, ponieważ to pytanie je obejmuje, ale odpowiedzi nie (poza tym npm config).
trysis
Zmienna środowiskowa NODE zasadniczo służy tylko do ujawnienia plików binarnych. Nadal musisz ustawić prefiks i pamięć podręczną (jeśli nie zostały wcześniej ustawione), jak wspomniano w procedurze.
Damilola,
Och dziękuje. Nie było to bardzo jasne z odpowiedzi ani nigdzie indziej w Google. Szukałem zmiennych środowiskowych, ponieważ można je łatwiej zmienić programowo, ale wydaje mi się, że jednowierszowe polecenia Bash są również w porządku.
trysis
To zadziałało pięknie dla mnie. Dziękuję za szczegółowe instrukcje!
ErnestoP
15

Należy użyć tego polecenia, aby ustawić globalną lokalizację instalacji pakietów npm

(git bash) npm config --global set prefix </path/you/want/to/use>/npm

(cmd / git-cmd) npm config --global set prefix <drive:\path\you\want\to\use>\npm

Możesz również wziąć pod uwagę npm-cachelokalizację tuż obok. (tak jak w przypadku normalnej instalacji nodejs w systemie Windows)

(git bash) npm config --global set cache </path/you/want/to/use>/npm-cache

(cmd / git-cmd) npm config --global set cache <drive:\path\you\want\to\use>\npm-cache

davejoem
źródło
1
Miło, że mogłem pomóc. Byłoby również świetnym pomysłem utworzenie skryptu shella lub pliku wsadowego, który będzie wykonywał to za Ciebie za każdym razem, gdy zmienisz środowisko. Przynajmniej tak robię
davejoem
Warto również dodać „jeśli na ścieżce są spacje. Np "C:\Program Files\blah".
taylorswiftfan
7
  • Krok 1 :

    npm config get prefiks

    • Domyślna ścieżka to: %USERPROFILE%\AppData\Roaming\npm
  • Krok 2 :

    npm config pobierz pamięć podręczną

    • Domyślna ścieżka to: %USERPROFILE%\AppData\Roaming\npm-cache
  • Krok 3 :

    npm config ustaw prefiks \ npm

    • przykład npm config set prefix C:\\dev\\node\\npm
  • Krok 4 :

    npm config set cache \ npm-cache

    • przykład npm config set cache C:\\dev\\node\\npm-cache

Uruchom ponownie kroki 1 i 2, aby sprawdzić, czy ścieżki zostały zaktualizowane zgodnie z wymaganiami

Otóż ​​to. Za każdym razem, gdy instalujesz pakiety globalne, powinieneś zobaczyć je zainstalowane w \ npm \ node_modules

Kandeepa
źródło
Dzięki twojemu rozwiązaniu rozwiązałem mój problem, od ostatnich 2 tygodni próbowałem rozwiązać problem, Właściwie moja ścieżka użytkownika Windows zawierała spacje takie jak ABC XYZ WJS, więc potem zmieniłem ścieżkę na jedno słowo, po czym moja instalacja npm dawała błędy, więc Twoje rozwiązanie pomoże mi wyczyścić pamięć podręczną i ustawić pamięć podręczną w nowej lokalizacji.
Tahir Afridi
4

Domyślny folder globalny to C:\Users\{username}\AppData\Roaming\npm. Możesz utworzyć (jeśli nie istnieje) .npmrcplik w C:\Users\{username}\i dodać prefix = "path\\to\\yourglobalfolder". Zauważ, że w oknach ścieżka powinna być oddzielona double back-slash.

angeldsWang
źródło
3

Użycie linku symbolicznego systemu Windows ze ścieżek C: \ Users {nazwa użytkownika} \ AppData \ Roaming \ npm i C: \ Users {nazwa użytkownika} \ AppData \ Roaming \ npm-cache do miejsca docelowego działało świetnie.

Jak dodać dowiązanie symboliczne

wprowadź opis obrazu tutaj

dynamiclynk
źródło
1

W systemie Windows, jeśli chcesz przenieść folder npm lub nodejs na dysku C do innej lokalizacji, ale nadal zapewnia, że ​​węzeł i npm działają dobrze, możesz utworzyć łącze symboliczne w ten sposób: Otwórz wiersz polecenia:

mklink /D "your_location_want_to_create_symlink" "location_of_node_npm_file"

Przykład:

mklink /D "C:\Users\MyUser\AppData\Roaming\npm" "D:\Nodejs Data\npm"

Teraz utworzyłeś łącze symboliczne dla folderu npm, to łącze symboliczne będzie odnosić się do D:\Nodejs Data\npmWszystko będzie działać dobrze.

Vinh Trieu
źródło
0

Wypróbowałem większość odpowiedzi tutaj, nic nie wydaje się działać w moim przypadku. Więc zmieniłem lokalizację Temp w moich zmiennych env na C: \ npm. Wtedy zaczęło działać. To nie jest dobry pomysł, ale tymczasowe rozwiązanie.

Manoj
źródło
0

Całkowicie usuń folder węzła z folderu plików programu. Odinstaluj node.js, a następnie zainstaluj go ponownie. zmiana Ścieżka zmiennej środowiskowej PATH. usuń plik .npmrc z C: \ użytkownicy \ twoja nazwa użytkownika

Santosh Kadam
źródło
2
Czy masz jakieś dokumenty lub źródła potwierdzające twoje oświadczenie? Jak napisano w obecnym stanie, trudno jest stwierdzić, czy Twoja sugestia faktycznie działa bez wypróbowania jej samodzielnie, co zajmuje czas, który można by zaoszczędzić w inny sposób.
Filnor
0

nie wymaga wielu konfiguracji, po prostu przejdź do zaawansowanych ustawień systemu, skopiuj ścieżkę, w której zainstalowałeś węzeł i po prostu utwórz zmienną środowiskową i sprawdź za pomocą polecenia node -v w swoim znaku zachęty!

Animesh Saxena
źródło
0

Aby zmienić domyślny globalny katalog instalacyjny dla modułów node.js (npm) w systemie Windows, musisz naprawić 2 ścieżki.

Najpierw sprawdź bieżącą ścieżkę, w której instalowane są moduły węzłów, gdy próbujesz zainstalować je globalnie, używając następującego polecenia:

npm list -g --depth = 0

Zwróci ci bieżącą ścieżkę, w której moduły węzłów są teraz instalowane. Przykład: D: \ vsc \ Typscript

Teraz odwiedź następującą ścieżkę, aby zobaczyć folder npm i npm-cache. C: \ Users \ nazwa użytkownika (lub numer) \ AppData \ Roaming

W folderze Roaming na dysku C znajdziesz folder npm i npm-cache. Kliknij folder + npm + i wybierz ścieżkę [Wystarczy kliknąć na pasku ścieżka zostanie wybrana automatycznie, skopiuj ją]. To jest obraz ścieżki, który musisz wybrać

Po skopiowaniu tej ścieżki ustaw ją na zmienne środowiskowe, z nazwą zmiennej Path (wszystko, co możesz wybrać jako nazwę). Teraz ustawiłeś ścieżkę do swojego folderu npm, teraz jest czas na ustawienie prefiksu. Wejdź do folderu npm i sprawdź, czy istnieje folder node_module, jeśli nie, utwórz nowy folder o nazwie node_modules. Wszystkie moduły globalne pojawią się w tym folderze po wykonaniu wszystkich kroków.

Ostatni krok: przejdź do CMD i skoryguj następujące polecenie:

npm ustaw prefiks C: \ Users \ nazwa_użytkownika (numer) \ AppData \ Roaming \ npm \ node_modules

Ponownie jest to ta sama ścieżka, którą wybraliśmy dla zmiennej środowiskowej, po prostu dodajemy jeszcze jeden folder do ścieżki, a mianowicie node_module.

Wszystko gotowe… Wypróbuj teraz… To zadziała…

TechTutsIndia
źródło
0

Znajdź bieżącą ścieżkę instalacji pakietu węzłów globalnych, wykonując następujące polecenie.

npm list -g --depth = 0

Zmień tę ścieżkę na poprawną ścieżkę, wykonując następujące polecenie.

npm ustaw prefiks C: \ Users \ nazwa_użytkownika (numer) \ AppData \ Roaming \ npm \ node_modules

U mnie zadziałało. Przeczytaj moją poprzednią odpowiedź, aby lepiej zrozumieć.

TechTutsIndia
źródło