Gdzie npm instaluje pakiety?

977

Czy ktoś może mi powiedzieć, gdzie mogę znaleźć moduły Node.js, które zainstalowałem npm?

trnc
źródło
3
na Linuksie miętowym$HOME/.npm-global/lib/node_modules
Synxmax
9
Wystarczy więc każdy wie, instalacja bez -gopcji będzie zainstalować moduł do ciebie pracuje katalogów np jeśli się katalogiem powiedzieć ~/Desktop/tmpczym cd ~/Desktop/tmpwtedy nie npm install appiumwtedy nie lswidać node_modules package-lock.json, ponieważ został zainstalowany moduł węzła appiumdo swojej working directory... bardzo mylące, ponieważ -gpowinien być zasadniczo defaultale nie jest.
the_prole
2
@ theprole - dzięki, to było niezwykle przydatne .
Fattie,

Odpowiedzi:

1142

Globalne biblioteki

Możesz uruchomić, npm list -gaby zobaczyć, które biblioteki globalne są zainstalowane i gdzie się znajdują. Użyj npm list -g | head -1dla obciętego wyjścia pokazującego tylko ścieżkę. Jeśli chcesz wyświetlić tylko paczki główne, a nie ich paczki, które instalują się wraz z nim - możesz użyć - npm list --depth=0który pokaże wszystkie pakiety i aby uzyskać tylko pakiety globalnie zainstalowane, po prostu dodaj -g tj npm list -g --depth=0.

W systemach Unix są zwykle umieszczane w /usr/local/lib/nodelub /usr/local/lib/node_modulesinstalowane globalnie. Jeśli NODE_PATHzmienna środowiskowa zostanie ustawiona na tę ścieżkę, moduły można znaleźć według węzła.

Windows XP - %USERPROFILE%\AppData\npm\node_modules
Windows 7, 8 i 10 -%USERPROFILE%\AppData\Roaming\npm\node_modules

Biblioteki nieglobalne

Biblioteki nieglobalne są instalowane w node_modulespodfolderze w folderze, w którym się obecnie znajdujesz.

Możesz uruchomić, npm listaby zobaczyć zainstalowane biblioteki inne niż globalne dla bieżącej lokalizacji.

Podczas instalacji użyj opcji -g, aby zainstalować globalnie

npm install -g pm2- pm2 zostanie zainstalowany globalnie. Zwykle można go znaleźć w /usr/local/lib/node_modules(Użyj, npm root -gaby sprawdzić, gdzie.)

npm install pm2- pm2 zostanie zainstalowany lokalnie. Zwykle będzie to można znaleźć w katalogu lokalnym w/node_modules

Decko
źródło
26
Jeśli używasz NVM, twoje globalne moduły mogą znajdować się w jednym z kilku miejsc, w zależności od wersji używanego w danym momencie węzła. Najlepszym sposobem jest użycie npm list -gzgodnie z sugestią zawartą w innej odpowiedzi.
nieskryptowalny
73
nie działa dla mnie, pokazuje tylko folder bin. „npm root -g” działa.
whitneyland,
7
w Arch Linux, globalne moduły znajdują się w / usr / lib. „npm --help” pokazuje dokładną lokalizację jako ostatni wiersz wyniku, np .: [email protected] / usr / lib / node_modules / npm
Gregor
20
dla systemu Windows 10, umieszczony w%USERPROFILE%\AppData\Roaming\npm\node_modules
Nirmal Goswami
11
„npm root -g” jest poprawny - lista może działać, ale to zdecydowanie za dużo informacji, gdzie jak inne polecenie po prostu podaje dokładną lokalizację, której szukasz. stackoverflow.com/a/24295332/174965
Adam Tolley
581

Polecenie npm rootpowie ci efektywny katalog instalacyjny twoich pakietów npm.

Jeśli bieżący katalog roboczy to pakiet węzłów lub podkatalog pakietu węzłów, npm rootpoinformuje o lokalnym katalogu instalacyjnym. npm root -gpokaże globalny katalog główny instalacji niezależnie od bieżącego katalogu roboczego.

Przykład:

$ npm root -g
/usr/local/lib/node_modules

Zobacz dokumentację.

Joe Hawkins
źródło
1
+1 dla tej odpowiedzi (przynajmniej pod Linux Mint 17 Qianna i npm 3.9.5). Mój node_modulesfolder globalny jest w /usr/local/lib/node_modules. Kiedy to robię, tj. sudo npm uninstall browserify -g(Zakładając, że robiłem to sudo npm install browserify -gwcześniej), usuwa to stamtąd.
nik_m
10
Jest to o wiele bardziej użyteczna odpowiedź, ponieważ dane wyjściowe są odpowiednie do tworzenia większych poleceń bez wyodrębniania ścieżki z wielu wyników.
Adam Tolley,
2
Domyślny root w systemie operacyjnym Windows to C: \ Users \ YOUR_USER_NAME \ AppData \ Roaming \ npm \ node_modules
Vincent Tang
2
W przypadku MacOS Mojave 10.14.5 to także/usr/local/lib/node_modules
Jim Aho
89

W przypadku modułów zainstalowanych globalnie:

Inne odpowiedzi dają odpowiedzi specyficzne dla platformy, ale ogólna jest następująca:

Kiedy instalujesz moduł globalny za pomocą npm install -g something, npm wyszukuje zmienną konfiguracyjną, prefixaby wiedzieć, gdzie zainstalować moduł.

Możesz uzyskać tę wartość, uruchamiając npm config get prefix

Aby wyświetlić wszystkie globalne moduły dostępne w tym folderze, użyj npm ls -g --depth 0( depth 0aby nie wyświetlać ich zależności).

Jeśli chcesz zmienić globalną ścieżkę modułów, użyj npm config editi umieść prefix = /my/npm/global/modules/prefixplik lub użyj npm config set prefix /my/npm/global/modules/prefix.

Kiedy używasz niektórych narzędzi, takich jak nodist , zmieniają domyślną ścieżkę instalacji globalnych modułów npm.

jakub.g
źródło
2
Odpowiedziałeś na moje dalsze pytanie: „Czy ktoś może mi powiedzieć, jak mogę zmienić lokalizację modułów Node.js?” Uwaga: Powodem, dla którego było to dla mnie ważne, było to, że nie musiałem ponownie zmieniać mojej ŚCIEŻKI. Odkomentowałem domyślną sugestię w pliku npmrc, który otwiera {npm config get prefx}.
HeyZiko,
„Gdy używasz niektórych narzędzi, takich jak nodist, zmieniają domyślną ścieżkę instalacji globalnych modułów npm”. +1
Jim Aho
65

W Windowsach npm list -gto znajdowałem. Domyślnie instalowane były moje (globalne) pakiety C:\Users\[Username]\AppData\Roaming\npm.

9swampy
źródło
9
Tylko do Twojej wiadomości - To jest% appdata% \ npm wykonującego użytkownika
Felix
19

Jeśli szukasz pliku wykonywalnego, który zainstalowałeś npm, być może dlatego, że chciałbyś umieścić go w swojej ŚCIEŻCE, możesz po prostu zrobić

npm bin

lub

npm bin -g
Ken Goodridge
źródło
Jeśli masz globalnie zainstalowane pakiety npm, w których węzeł został zainstalowany za pomocą homebrew, a następnie npm zaktualizowane za pomocą samego npm, być może występują command not foundbłędy. Jeśli tak, dodaj powyższą PATH: export PATH=$PATH:$(npm bin -g)voila
jacob
18

We wcześniejszych wersjach moduły NPM zawsze były umieszczane w / usr / local / lib / node lub gdziekolwiek podałeś root npm w pliku .npmrc. Jednak w NPM 1.0+ moduły są instalowane w dwóch miejscach. Możesz mieć moduły zainstalowane lokalnie dla twojej aplikacji w /.node_modules lub możesz mieć zainstalowane globalnie, które będą korzystać z powyższego.

Więcej informacji można znaleźć na https://github.com/isaacs/npm/blob/master/doc/install.md

Nick Campbell
źródło
4
Coś, na co należy zwrócić uwagę - moduły 1.0 są przechowywane w / usr / local / lib / node_modules.
Nick Campbell
@EricSmith twój link też jest zepsuty
nicolimo86 30.09.19
16

Nie bezpośrednia odpowiedź, ale może pomóc ...

Npm ma również folder pamięci podręcznej, który można znaleźć, uruchamiając npm config get cache( %AppData%/npm-cachew systemie Windows).

Moduły npm są najpierw pobierane tutaj, a następnie kopiowane do globalnego folderu npm ( %AppData%/Roaming/npmw systemie Windows) lub folderu określonego projektu ( your-project/node_modules).

Więc jeśli chcesz śledzić pakiety NPM i jak to zrobić, lista wszystkich pobranych pakietów NPM (jeśli pamięć podręczna NPM nie jest czyszczona) spójrz na ten folder. Struktura folderów jest taka jak{cache}/{name}/{version}

Może to również pomóc https://docs.npmjs.com/cli/cache

Alireza Fattahi
źródło
14

Jeśli moduł został zainstalowany z -gflagą global ( ), można uzyskać lokalizację nadrzędną, uruchamiając następującą komendę

npm get prefix

lub

npm ls -g --depth=0

który wydrukuje lokalizację wraz z listą zainstalowanych modułów

Twoje zdrowie :-)

Mohanraj Balasubramaniam
źródło
13

Najłatwiej byłoby to zrobić

lista npm -g

aby wyświetlić listę pakietów i wyświetlić ich zainstalowaną lokalizację.

Zainstalowałem npm przez chololatey, więc lokalizacja jest

C: \ MyProgramData \ chocolatey \ lib \ nodejs.commandline.0.10.31 \ tools \ node_modules

C: \ MyProgramData \ to czekoladowa lokalizacja repo.

Tharaka
źródło
12

Aby uzyskać zwartą listę bez zależności, po prostu użyj

npm list -g --depth 0
Adam Bubela
źródło
6

Polecenie można znaleźć globalnie zainstalowane moduły

npm list -g

Zapewni ci lokalizację, w której zostały zainstalowane moduły node.js.

C:\Users\[Username]\AppData\Roaming\npm

Jeśli instalujesz moduły node.js lokalnie w folderze, możesz wpisać następujące polecenie, aby zobaczyć lokalizację.

npm list
Abdul Alim Shakir
źródło
4

Z dokumentów :

W npm 1.0 istnieją dwa sposoby instalowania rzeczy:

  • globalnie - {prefix}/lib/node_modulespowoduje to upuszczenie modułów i umieszczenie plików wykonywalnych {prefix}/bin, gdzie {prefix}zwykle jest coś takiego /usr/local. Instaluje również strony podręcznika {prefix}/share/man, jeśli są dostarczone.

  • lokalnie - powoduje to zainstalowanie pakietu w bieżącym katalogu roboczym. Moduły węzłów wchodzą ./node_modules, uruchamiają się pliki wykonywalne ./node_modules/.bin/, a strony podręcznika wcale nie są instalowane.

Można uzyskać {prefix}z npm config get prefix. (Przydatne, gdy zainstalowałeś węzeł z nvm).

edelany
źródło
3

Z dokumentów :

Pakiety są upuszczane do folderu node_modules pod prefiksem. W przypadku instalacji lokalnej oznacza to, że możesz wymagać („nazwa_pakietu”), aby załadować jego moduł główny, lub („nazwa_pakietu / lib / ścieżka / do / sub / modułu”), aby załadować inne moduły.

Globalne instalacje w systemach Unix znajdują się w {prefix} / lib / node_modules. Globalne instalacje w systemie Windows przechodzą do {prefix} / node_modules (czyli nie ma folderu lib).

Pakiety o zasięgu są instalowane w ten sam sposób, z tym wyjątkiem, że są pogrupowane razem w podfolderze odpowiedniego folderu node_modules z nazwą tego prefiksu zakresu przez symbol @, np. Npm install @ myorg / package umieściłby pakiet w {prefix} / node_modules / @ myorg / package. Zobacz zakres po więcej szczegółów.

Jeśli chcesz wymagać () pakietu, zainstaluj go lokalnie.

Można uzyskać {prefix}z npm config get prefix. (Przydatne, gdy zainstalowałeś węzeł z nvm).

Przeczytaj o lokalnie .
Przeczytaj o całym świecie .

Randall Flagg
źródło
3

W Ubuntu 14.04 są one instalowane na

/usr/lib/node_modules

Ashutosh Singh
źródło
3

Zaczynałem wariować, szukając prawdziwej konfiguracji, więc oto cała lista plików konfiguracyjnych na Linuksie:

  • / etc / npmrc
  • /home/youruser/.npmrc
  • /root/.npmrc

w systemie Windows: - c / Program \ Files / nodejs / node_modules / npm / npmrc

Następnie w pliku konfigurowany jest prefiks:

prefix=/usr

Prefiks jest domyślnie ustawiony na / usr w systemie Linux, na $ {APPDATA} \ npm w systemie Windows

Moduły węzłów znajdują się pod drzewem $ prefix, a ścieżka powinna zawierać $ prefix / bin

Może występować problem:

  • Kiedy instalujesz globalnie, używasz „sudo su”, wtedy /root/.npmrcmożesz użyć!
  • Gdy używasz lokalnie bez sudo: dla użytkownika jest to /home/youruser/.npmrc.
  • Gdy twoja ścieżka nie reprezentuje twojego przedrostka
  • Kiedy npm set -g prefix /usrgo używasz , ustawia globalny plik / etc / npmrc, ale nie zastępuje lokalnego

Oto wszystkie informacje, których brakowało, aby znaleźć to, co skonfigurowano gdzie. Mam nadzieję, że byłem wyczerpujący.

pdem
źródło
2

Jak mówią inne odpowiedzi, najlepszym sposobem jest zrobienie tego

npm list -g

Jeśli jednak masz zainstalowaną dużą liczbę npmpakietów, wynik tego polecenia może być bardzo długi i może być trudny do przewinięcia w górę (czasami nawet nie jest możliwe przewinięcie tak daleko wstecz).

W takim przypadku potokuj wyjście do moreprogramu, tak jak to

npm list -g | more
Raphi
źródło
2

Windows 10 : Kiedy uruchomiłemnpm prefix -g, zauważyłem, że miejsce instalacji znajduje się w ścieżce powłoki git, którą instalowałem. Nawet po dodaniu tej lokalizacji do ścieżki polecenie z globalnie zainstalowanego pakietu nie zostanie rozpoznane. Naprawione przez:

  1. bieganie npm config edit
  2. zmiana prefiksu na „C: \ Users \ nazwa użytkownika \ AppData \ Roaming \ npm”
  3. dodanie tej ścieżki do zmiennej ścieżki systemowej
  4. przeinstalowanie pakietu za pomocą -g.
Marc Sloth Eastman
źródło
2

Rozszerzanie innych odpowiedzi -

npm list -g

pokaże lokalizację globalnie zainstalowanych pakietów.

Jeśli chcesz wypisać tę listę do pliku, który możesz łatwo wyszukać w edytorze tekstu:

npm list -g > ~/Desktop/npmfiles.txt

TWLATL
źródło
1

Btw, npm wyszuka moduły node_modułów w folderach nadrzędnych (do samego katalogu głównego), jeśli nie można ich znaleźć w lokalnych.

Witalij Markitanow
źródło
1

Jeśli próbujesz uzyskać dostęp do globalnego katalogu z kodu, możesz cofnąć się z process.execPath. Na przykład, aby znaleźć wsproxy, który jest w {NODE_GLOBAL_DIR}/bin/wsproxy, możesz po prostu:

path.join(path.dirname(process.execPath), 'wsproxy')

Istnieje również sposób działania npmcli @ ec9fcc1/lib/npm.js#L254 z:

path.resolve(process.execPath, '..', '..')

Zobacz także ec9fcc1/lib/install.js#L521 :

var globalPackage = path.resolve(npm.globalPrefix,
                                 'lib', 'node_modules', moduleName(pkg))

Gdzie globalPrefixjest ustawiony domyślnie w ec9fcc1/lib/config/defaults.js#L92-L105 z:

if (process.env.PREFIX) {
    globalPrefix = process.env.PREFIX
} else if (process.platform === 'win32') {
    // c:\node\node.exe --> prefix=c:\node\
    globalPrefix = path.dirname(process.execPath)
} else {
    // /usr/local/bin/node --> prefix=/usr/local
    globalPrefix = path.dirname(path.dirname(process.execPath))

    // destdir only is respected on Unix
    if (process.env.DESTDIR) {
        globalPrefix = path.join(process.env.DESTDIR, globalPrefix)
    }
}
W
źródło
Jak to powinno działać? Na przykład, plik binarny węzła jest w /usr/bin/node, ale oczywiście (ponieważ jest to bin) nie ma modułów; zamiast tego są w /usr/lib/node_modules.
Florian Rappl,
Zaktualizowano w odniesieniu do npmwdrożenia
AT
To już inna historia; wprowadzasz platformę (dobra) i odpowiednie zmienne env (pomimo nie wspominając o tym, jakie ważne funkcje, takie jak moduleName, ale myślę, że przeciętny czytelnik będzie w stanie wywnioskować). Dzięki za modyfikację / korektę!
Florian Rappl,
1

Jeśli masz zainstalowany program Visual Studio, zobaczysz, że zawiera on własną kopię węzła osobną od tej, która jest na ścieżce, gdy sam zainstalowałeś węzeł - mój jest w C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Community \ MSBuild \ Microsoft \ VisualStudio \ NodeJs.

Jeśli uruchomisz komendę npm z tego katalogu, dowiesz się, które moduły węzłów są zainstalowane w Visual Studio.

Andy
źródło
0

Windows 7, 8 i 10 -% USERPROFILE% \ AppData \ Roaming \ npm \ node_modules.

Uwaga: Jeśli jesteś gdzieś w typie folderu, cd ..dopóki nie znajdziesz się w C:katalogu. Następnie wpisz cd %USERPROFILE%\AppData\Roaming\npm\node_modules. I magicznie %USERPROFILE%zmieni się w Users\YourUserProfile\. Chciałem tylko wyjaśnić pomysły zgłoszone Deckow pierwszej odpowiedzi. npm list -gwyświetli listę wszystkich bitów zainstalowanych globalnie. Jeśli potrzebujesz znaleźć swój projekt związany npm packagewtedy cd 'your angular project xyz', uruchom npm list. Wyświetli listę modułów w npm package. Otrzymasz także listę dependenciesbrakujących i może być konieczne skuteczne uruchomienie tego projektu.

surendrapanday
źródło