Где npm устанавливает пакеты?

977

Может кто-нибудь сказать мне, где я могу найти модули Node.js, которые я установил, используя npm?

ТРСК
источник
3
на Linux $HOME/.npm-global/lib/node_modules
Mint
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 - спасибо, это было невероятно полезно .
Толстяк

Ответы:

1144

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

Вы можете запустить, 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

Decko
источник
26
Если вы используете nvm, то ваши глобальные модули могут находиться в одном из нескольких мест в зависимости от версии узла, который вы используете в данный момент. Лучший способ - использовать npm list -gкак предложено в другом ответе.
неприлично
73
у меня не работает, показывает только папку bin. «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
Нирмал Госвами
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: \ Users \ YOUR_USER_NAME \ AppData \ Roaming \ 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.

jakub.g
источник
2
Вы ответили на мой дополнительный вопрос: «Может ли кто-нибудь сказать мне, как я могу изменить расположение модулей Node.js?» Примечание: причина, по которой это было важно для меня, заключалась в том, что мне больше не пришлось менять свой PATH. Я раскомментировал предложение по умолчанию в файле npmrc, что {npm config get prefx} открывается.
HeyZiko
«Когда вы используете некоторые инструменты, такие как nodist, они изменяют путь установки платформы по умолчанию для глобальных модулей npm». +1
Джим Ахо
65

На окнах я привык npm list -gэто выяснять. По умолчанию мои (глобальные) пакеты устанавливались в C:\Users\[Username]\AppData\Roaming\npm.

9swampy
источник
9
Просто к сведению - это% appdata% \ npm исполняющего пользователя
Феликс,
19

Если вы ищете исполняемый файл, который установил npm, возможно, потому что вы хотите поместить его в свой PATH, вы можете просто сделать

npm bin

или

npm bin -g
Кен Гудридж
источник
Если вы глобально установили пакеты npm, где узел был установлен с помощью homebrew, а затем npm был обновлен до самого npm, возможно, вы получаете command not foundошибки. Если да, то добавьте aboveto ваш PATH: export PATH=$PATH:$(npm bin -g)вуаля
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 ваша ссылка тоже
битая
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флагом global ( ), вы можете получить родительское местоположение, выполнив следующую команду

npm get prefix

или

npm ls -g --depth=0

который распечатает местоположение вместе со списком установленных модулей

Ура :-)

Моханрай Баласубраманиам
источник
13

Самый простой способ будет сделать

список npm -g

составить список пакетов и просмотреть их установленное местоположение.

Я установил npm через chololatey, поэтому расположение

C: \ MyProgramData \ шоколадным \ 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. Он также устанавливает man-страницы {prefix}/share/man, если они есть.

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

Вы можете получить {prefix}с npm config get prefix. (Полезно, когда вы установили узел с помощью nvm).

edelans
источник
3

Из документов :

Пакеты сбрасываются в папку node_modules под префиксом. При локальной установке это означает, что вы можете потребовать ("имя_пакета") загрузить его основной модуль или потребовать ("имя_пакета / lib / path / to / sub / module") для загрузки других модулей.

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

Пакеты с установленной областью устанавливаются таким же образом, за исключением того, что они группируются в подпапке соответствующей папки node_modules с именем префикса этой области с помощью символа @, например, npm install @ myorg / package будет помещать пакет в {префикс} / node_modules / @ MyOrg / пакет. Смотрите область для более подробной информации.

Если вам требуется () пакет, установите его локально.

Вы можете получить {prefix}с npm config get prefix. (Полезно, когда вы установили узел с помощью nvm).

Читайте о местном .
Читайте о глобально .

Рэндалл Флэгг
источник
3

В Ubuntu 14.04 они установлены на

/usr/lib/node_modules

Ашутош Сингх
источник
3

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

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

на окнах: - c / Program \ Files / nodejs / node_modules / npm / npmrc

Затем в файле настраивается префикс:

prefix=/usr

По умолчанию используется префикс / usr в Linux, $ {APPDATA} \ npm в Windows

Модули узла находятся в дереве $ prefix, а путь должен содержать $ prefix / bin

Там может быть проблема:

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

Вот вся информация, которой не хватало, чтобы найти, где что настроено. Надеюсь, я был исчерпывающим.

pdem
источник
2

Как говорят другие ответы, лучший способ сделать

npm list -g

Однако, если у вас установлено большое количество npmпакетов, вывод этой команды может быть очень длинным и вызывать большие трудности при прокрутке вверх (иногда даже невозможно прокрутить так далеко назад).

В этом случае передайте moreпрограмму в программу, например, так:

npm list -g | more
Raphi
источник
2

Windows 10 : Когда я запустилсяnpm prefix -g, я заметил, что место установки находится внутри пути оболочки git, который я использовал для установки. Даже если это местоположение было добавлено в путь, команда из глобально установленного пакета не будет распознана. Исправлено:

  1. Бег npm config edit
  2. изменив префикс на «C: \ Users \ имя пользователя \ AppData \ Roaming \ npm»
  3. добавив этот путь к системной переменной пути
  4. переустановка пакета с помощью -g.
Марк Слот Истман
источник
2

Развивая другие ответы -

npm list -g

покажет вам местоположение глобально установленных пакетов.

Если вы хотите вывести этот список в файл, который вы можете легко найти в текстовом редакторе:

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

TWLATL
источник
1

Кстати, npm будет искать node_modules в родительских папках (вплоть до самого root), если не может найти их в локальной папке.

Виталий Маркитанов
источник
1

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

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

Там также как npmCli работает @ 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)
    }
}
В
источник
Как это должно работать? Например, двоичный файл Node находится в /usr/bin/node, но, очевидно, (поскольку это мусорное ведро) модулей там нет; вместо этого они в /usr/lib/node_modules.
Флориан Раппл
Обновление со ссылкой на npmреализацию
AT
Теперь это другая история; Вы вводите платформу (хорошо) и соответствующие переменные env (несмотря на то, что не упоминается, что делают важные функции, такие как moduleName, но я предполагаю, что средний читатель сможет сделать вывод). Спасибо за изменение / исправление!
Флориан Раппл
1

Если у вас установлена ​​Visual Studio, вы обнаружите, что она поставляется с собственной копией узла, отличной от той, которая находится в пути, когда вы сами устанавливали узел. Моя папка находится в C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Пользователи \ MSBuild \ Microsoft \ VisualStudio \ NodeJs.

Если вы запустите команду npm из этого каталога, вы узнаете, какие модули узлов установлены в Visual Studio.

Энди
источник
0

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

Примечание: если вы находитесь где-то в папке типа, 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пропавших без вести, и вам может потребоваться эффективно запустить этот проект.

surendrapanday
источник