Де npm встановлює пакети?


977

Хтось може сказати мені, де я можу знайти модулі Node.js, які я встановив за допомогою npm?


3
на монетному дворі Linux це$HOME/.npm-global/lib/node_modules
Synxmax,

9
Точно так же кожен знає, установка без -gопції буде встановлено модуль для вас робочий каталог , наприклад , якщо ви зробите каталог кажуть ~/Desktop/tmpто cd ~/Desktop/tmpтоді робити npm install appiumте ж lsви побачите , node_modules package-lock.jsonтому що ви встановили модуль вузла appiumдо вашого working directory... супер заплутаним , тому що -gмає бути по суті , defaultале це не так .
the_prole

2
@the_prole - дякую, це було неймовірно корисно .
Fattie

Відповіді:


1142

Глобальні бібліотеки

Ви можете запустити, npm list -gщоб побачити, які глобальні бібліотеки встановлені та де вони знаходяться. Використовуйте npm list -g | head -1для усіченого виводу, що показує лише шлях. Якщо ви хочете відображати лише основні пакунки, а не його підпакети, які встановлюються разом із ним - ви можете використовувати - npm list --depth=0який покаже всі пакунки та для отримання лише глобально встановлених пакетів, просто додайте -g, тобто npm list -g --depth=0.

У системах Unix вони зазвичай розміщуються /usr/local/lib/nodeабо /usr/local/lib/node_modulesвстановлюються в усьому світі. Якщо встановити NODE_PATHзмінну середовища для цього шляху, модулі можна знайти по вузлу.

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

Не глобальні бібліотеки

Не глобальні бібліотеки встановлюються node_modulesпідпапки в папці, в якій ви зараз перебуваєте.

Ви можете запустити, npm listщоб побачити встановлені не глобальні бібліотеки для вашого поточного місцезнаходження.

При встановленні використовуйте -g параметр для глобальної установки

npm install -g pm2- pm2 буде встановлено у всьому світі. Потім вони зазвичай знаходяться в /usr/local/lib/node_modules(Використовуйте, npm root -gщоб перевірити, де.)

npm install pm2- pm2 буде встановлено локально. Потім вони зазвичай знаходяться в локальному каталозі в/node_modules


26
Якщо ви використовуєте nvm, то ваші глобальні модулі можуть знаходитися в одному з кількох місць, залежно від версії вузла, яку ви використовуєте на той час. Найкращим способом є використання, npm list -gяк запропоновано в іншій відповіді.
непридатний

73
не працює для мене, показує лише папку бін. "npm root -g" працює.
Уїтніленд

7
під Arch linux глобальні модулі знаходяться під / usr / lib. "npm --help" показує точне розташування як останній рядок виводу, наприклад: npm@3.6.0 / usr / lib / node_modules / npm
Грегор,

20
для windows 10, розміщений у%USERPROFILE%\AppData\Roaming\npm\node_modules
Nirmal Goswami

11
"npm root -g" правильний - список може працювати, але це занадто багато інформації, де як і інша команда просто дає точне місце, яке ви шукаєте. stackoverflow.com/a/24295332/174965
Адам Толлі

581

Команда npm rootпідкаже вам каталог ефективних установок ваших пакетів npm.

Якщо ваш поточний робочий каталог - це пакет вузлів або підкаталог пакету вузлів, npm rootвам повідомить локальну інсталяційну директорію. npm root -gпокаже глобальний корінь установки незалежно від поточного робочого каталогу.

Приклад:

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

Дивіться документацію.


1
+1 на цю відповідь (принаймні під Linux Mint 17 Qianna та npm 3.9.5). Моя глобальна node_modulesпапка знаходиться в /usr/local/lib/node_modules. Коли я це роблю sudo npm uninstall browserify -g(якщо припустити, що раніше робив sudo npm install browserify -g), він видаляє його звідти.
nik_m

10
Це набагато корисніша відповідь, оскільки вихід підходить для складання більших команд без вилучення шляху з пучка виводу.
Адам Толлі

2
Корінь за замовчуванням в ОС Windows становить C: \ Користувачі \ YOUR_USER_NAME \ AppData \ Роумінг \ npm \ node_modules
Вінсент Тан,

2
Для MacOS Mojave 10.14.5 це також/usr/local/lib/node_modules
Джим Ахо

89

Для глобально встановлених модулів:

Інші відповіді дають відповіді, що залежать від платформи, але загальний такий:

Коли ви встановлюєте глобальний модуль за допомогою npm install -g something, npm шукає конфігураційну змінну, prefixщоб знати, де встановити модуль.

Ви можете отримати це значення, запустивши npm config get prefix

Для відображення всіх глобальних модулів, доступних у цій папці, використовується npm ls -g --depth 0( depth 0щоб не відображати їх залежності).

Якщо ви хочете змінити шлях глобальних модулів, використовуйте npm config editта введіть prefix = /my/npm/global/modules/prefixу файл або вживання npm config set prefix /my/npm/global/modules/prefix.

Коли ви використовуєте такі інструменти, як nodist , вони змінюють шлях встановлення платформи за замовчуванням глобальних модулів npm.


2
Ви відповіли на моє подальше запитання: "Чи може хтось сказати мені, як я можу змінити розташування модулів Node.js?" Примітка. Причиною, чому це було важливо для мене, було те, що мені не довелося ще раз міняти свій ПАТ. Я прокоментував пропозицію за замовчуванням у файлі npmrc, що відкриється {npm config get prefx}.
HeyZiko

"Коли ви використовуєте такі інструменти, як nodist, вони змінюють шлях установки платформи за замовчуванням глобальних модулів npm." +1
Джим Ахо

65

На вікнах я npm list -gце знаходив. За замовчуванням мої (глобальні) пакети встановлювались C:\Users\[Username]\AppData\Roaming\npm.


9
Просто FYI - це% appdata% виконуваного користувача% \ npm
Фелікс

19

Якщо ви шукаєте виконаний файл, який встановив npm, можливо, тому, що ви хочете помістити його у свій PATH, ви можете просто зробити

npm bin

або

npm bin -g

Якщо ви глобально встановили npm-пакети, де вузол був встановлений з homebrew, а потім npm оновлений самим npm, ви можете отримати command not foundпомилки. Якщо так, додайте вищезгадане у свій ПАТ: export PATH=$PATH:$(npm bin -g)voila
jacob

18

У попередніх версіях модулі NPM завжди розміщувались у / usr / local / lib / node або де б ви не вказали корінь npm у файлі .npmrc. Однак у NPM модулі 1.0+ встановлені у двох місцях. Ви можете мати модулі, встановлені локально для вашої програми в /.node_modules, або ви можете встановити їх у всьому світі, які будуть використовувати вищезазначене.

Більше інформації можна знайти на веб- сайті https://github.com/isaacs/npm/blob/master/doc/install.md


4
Щось зауважити - з 1,0 модулями зберігаються в / usr / local / lib / node_modules.
Нік Кемпбелл

@EricSmith ваше посилання теж порушено
nicolimo86

16

Не пряма відповідь, але може допомогти ....

У npm також є папка кеша, яку можна знайти, запустивши npm config get cache( %AppData%/npm-cacheу Windows).

Модулі npm спочатку завантажуються сюди, а потім копіюються в глобальну папку npm ( %AppData%/Roaming/npmв Windows) або в конкретну папку проекту ( your-project/node_modules).

Отож, якщо ви хочете відстежувати npm-пакети, а також як-небудь, список усіх завантажених пакетів npm (якщо кеш-пам'ять npm не очищений) має переглянути цю папку. Структура папки є такою ж{cache}/{name}/{version}

Це може допомогти також https://docs.npmjs.com/cli/cache


14

Якщо модуль був встановлений з глобальним ( -g) прапором, ви можете отримати батьківське місцезнаходження, виконавши наступну команду

npm get prefix

або

npm ls -g --depth=0

який буде друкувати розташування разом зі списком встановлених модулів

Ура :-)


13

Найпростіше було б це зробити

npm список -g

перерахувати пакунок і переглянути їх встановлене місце.

Я встановив npm через chololatey, тому місце розташування є

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

C: \ MyProgramData \ - місце шоколадного репо.


12

Для отримання компактного списку без залежностей просто використовуйте

npm list -g --depth 0

6

Ви можете знайти глобально встановлені модулі за допомогою команди

npm list -g

Він надасть вам місце, де встановлені модулі node.js.

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

Якщо ви локально встановлюєте модулі node.js у папці, ви можете ввести наступну команду, щоб побачити місцеположення.

npm list

4

З документів :

У npm 1.0 є два способи встановлення речей:

  • в усьому світі - це опускає модулі {prefix}/lib/node_modulesі додає виконувані файли {prefix}/bin, де {prefix}зазвичай щось подібне /usr/local. Він також встановлює довідкові сторінки {prefix}/share/man, якщо вони постачаються.

  • локально - для встановлення вашого пакета в поточний робочий каталог. Модулі вузлів заходять ./node_modules, входять виконувані файли ./node_modules/.bin/, а довідкові сторінки взагалі не встановлені.

Ви можете отримати свій {prefix}з npm config get prefix. (Корисно при встановленні вузла з nvm).


3

З документів :

Пакети випадають у папку node_modules під префіксом. При локальній установці це означає, що ви можете вимагати ("ім'я пакета") завантажити його основний модуль або вимагати ("ім'я пакета / lib / шлях / до / під / модуль") для завантаження інших модулів.

Глобальні встановлення в системах Unix переходять до {prefix} / lib / node_modules. Глобальні встановлення в Windows переходять до {prefix} / node_modules (тобто папки lib.)

Розмірені пакети встановлюються однаково, за винятком того, що вони згруповані в підпапку відповідної папки node_modules з назвою цього префікса області символом @, наприклад, npm install @ myorg / package розмістить пакет у {prefix} / node_modules / @ myorg / package. Докладніше див.

Якщо ви хочете вимагати () пакет, то встановіть його локально.

Ви можете отримати свій {prefix}з npm config get prefix. (Корисно при встановленні вузла з nvm).

Читайте про місцеві .
Читайте про глобально .



3

Я починав з глузду шукати реальну конфігурацію, тому ось весь список файлів конфігурації в Linux:

  • / і т.д. / npmrc
  • /home/youruser/.npmrc
  • /root/.npmrc

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

Потім у файлі налаштовується префікс:

prefix=/usr

Префікс за замовчуванням до / usr в Linux, до $ {APPDATA} \ npm у Windows

Модулі вузлів знаходяться під деревом префікса $, і шлях повинен містити $ префікс / бін

Може виникнути проблема:

  • Коли ви встановлюєте глобально, ви використовуєте "sudo su", тоді вони /root/.npmrcможуть бути використані!
  • Коли ви користуєтесь локально без sudo: для свого користувача його /home/youruser/.npmrc.
  • Коли ваш шлях не представляє ваш префікс
  • При використанні npm set -g prefix /usrвін встановлює / etc / npmrc global, але не перекриває локальну

Ось вся інформація, якої бракувало, щоб знайти те, що налаштовано де. Сподіваюся, я був вичерпним.


2

Як кажуть інші відповіді, найкращий спосіб - це зробити

npm list -g

Однак якщо у вас є велика кількість npm пакетів, вихід цієї команди може бути дуже довгим і великим болем прокручуватися вгору (іноді навіть неможливо прокрутити це далеко назад).

У цьому випадку передайте moreпрограму, як це

npm list -g | more

2

Windows 10 : Коли я запускавсяnpm prefix -g, я помітив, що місце встановлення знаходиться всередині шляху git shell, який я використовував для установки. Навіть коли це місце було додано до шляху, команда з глобально встановленого пакету не буде розпізнана. Виправлено:

  1. біг npm config edit
  2. зміна префікса на "C: \ Користувачі \ ім'я користувача \ AppData \ Роумінг \ npm"
  3. додавши цей шлях до змінної системного шляху
  4. перевстановлення пакета за допомогою -g.

2

Розширення на інші відповіді -

npm list -g

покаже вам розташування глобально встановлених пакетів.

Якщо ви хочете вивести цей список у файл, який ви зможете легко шукати у текстовому редакторі:

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



1

Якщо ви намагаєтеся отримати доступ до свого глобального режиму з коду, ви можете відступити від нього process.execPath. Наприклад, щоб знайти wsproxy, що є {NODE_GLOBAL_DIR}/bin/wsproxy, ви можете просто:

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

Тут також npmпрацює ec9fcc1кліп @ /lib/npm.js#L254 із:

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

Дивіться також ec9fcc1/lib/install.js#L521 :

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

Де globalPrefixвстановлено типовий параметр у ec9fcc1/lib/config/defaults.js#L92-L105 з:

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)
    }
}

Як це має працювати? Наприклад, бінарний вузол знаходиться у /usr/bin/node, але очевидно (оскільки це бін) модулів немає; натомість вони на /usr/lib/node_modules.
Флоріан Раппл

Оновлення з посиланням на npmреалізацію
AT

Зараз це вже інша історія; ви приносите платформу (добро) та відповідні змінні env (незважаючи на те, що не згадуєте, які важливі функції, такі як moduleName, виконують, але, мабуть, середній читач зможе зробити висновок). Дякуємо за модифікацію / виправлення!
Флоріан Раппл

1

Якщо у вас встановлена ​​Visual Studio, ви побачите, що вона постачається з власною копією вузла, окремої від тієї, яка знаходиться на шляху, коли ви встановили вузол самостійно - Mine в C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Спільнота \ MSBuild \ Microsoft \ VisualStudio \ NodeJs.

Якщо запустити команду npm всередині цього каталогу, ви дізнаєтеся, які модулі вузлів встановлені у візуальній студії.


0

Windows 7, 8 та 10 -% USERPROFILE% \ AppData \ Роумінг \ npm \ node_модулі.

Примітка. Якщо ви знаходитесь десь у папці, cd ..поки не опинитесь у C:каталозі. Потім введіть cd %USERPROFILE%\AppData\Roaming\npm\node_modules. І, магічно %USERPROFILE%зміниться на Users\YourUserProfile\. Я просто хотів уточнити ідеї, про які йдеться Deckoу першій відповіді. npm list -gперерахує всі біти, які ви встановили в усьому світі. Якщо вам потрібно знайти проект, пов'язаний npm packageтоді cd 'your angular project xyz', запустіть npm list. Він покаже список модулів в npm package. Він також надасть вам список dependenciesвідсутніх, і вам може знадобитися ефективний запуск цього проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.