Где должны быть установлены мои модули npm в Mac OS X?

84

Я пытался обновить phonegapчерез, npmкогда у меня начались проблемы. Короче говоря, node_modulesна моем компьютере есть два каталога.

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

Когда я запускаю npm upgrade -g phonegap, кажется, что npmобновляет копию пакета, который находится в /usr/local/lib/node_modules. Однако, если я which phonegapобнаружу, что символическая ссылка указывает на более старую установку по адресу /usr/local/share/npm/lib/node_modules.

Кроме того, когда я пытаюсь установить автономный пакет, например express, файлы устанавливаются в /usr/local/lib/node_modulesкаталог, но нигде в моем каталоге не создается символическая ссылка на исполняемый файл.$PATH .

Два вопроса:

  • Какой каталог подходит для узловых модулей в Mac OS X?
  • Как я могу настроить npmсвязывание исполняемых файлов в моем $PATHпри установке программного обеспечения?

Бонусные баллы: nodeвлияет ли способ установки на конфигурацию? Вариантов очень много .


РЕДАКТИРОВАТЬ : Я понял, что в моем файле были созданы символические ссылки /usr/local/bin, но мой .bash_profileбыл настроен /usr/local/share/npm/binраньше, чем /usr/local/binв моем $PATH. Я смутно помню, как когда-то добавлял этот путь в свой профиль, но не знаю почему.

Итак, теперь возникает вопрос: как я получил два разных node_modulesкаталога на моем компьютере и почему я должен иметь свой node_modulesв share/npm/libподкаталоге, а не прямо в нем /usr/local/lib?

Бен Гарольд
источник

Ответы:

117

/usr/local/lib/node_modules - это правильный каталог для глобально установленных узловых модулей.

/usr/local/share/npm/lib/node_modulesдля меня не имеет смысла. Одна проблема здесь в том, что вы запутались, потому что есть два каталога с именем node_modules :

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

Последние, по-видимому, являются модулями узлов, которые поставляются с Node, например lodash, когда первый - это модули узлов, которые я установил с помощью npm.

Томас Дэвид Кехо
источник
1
В чем разница между этими двумя узлами? Для пользователей OS X рекомендуется при установке использовать тот, что от узла. Стоит ли переходить к правильной установке npm?
Алисия
2
Установлен npm2 с macports, ваши пути отсутствуют в этих местах, а также отсутствуют в / opt / local / share ..
holms
71

Второй Томас Дэвид Кехо , со следующей оговоркой -

Если вы используете диспетчер версий узлов (nvm), ваши глобальные модули узлов будут храниться под той версией узла, которую вы используете во время сохранения модуля.

Итак ~/.nvm/versions/node/{version}/lib/node_modules/.

джинна
источник
6
Именно то, что я искал.
ap_snitch
59
npm root -g

чтобы проверить глобальное расположение npm_modules

ленивый танк
источник
6

Если вы хотите знать, где находятся ваши пакеты NPM, вам следует:

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

Итак, учитывая, что npm сам является пакетом NODE, он устанавливается в том же месте, что и другие пакеты ( EUREKA ). Итак, чтобы подтвердить, вы должны cd в node_modules и перечислить каталог.

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

ИЛИ ЖЕ

npm root -g

Согласно комментарию @anthonygore

T04435
источник
5
Проще: npm root -g
anthonygore
1
для меня npm root -gи which npmне дал тех же результатов. Я хотел удалить, expo-cliи мне это удалось, удалив expoи expo-cliкаталоги из /usr/local/bin/npm. Спасибо @ T04435!
Aleksandar