префикс глобального пути npm

Я осторожнее, чем обычно, потому что меня смутило поведение npm в прошлом.

Я на Mac и установил узел.js через brew install node.

теперь, когда я хочу бежать jslint.js в командной строке команду jslint Я считаю, что канонический способ сделать это sudo npm install -g jslint который успешно работал с этим выходом:

$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)

впоследствии

$ jslint ply.js
zsh: command not found: jslint

из-за /usr/local/share/npm/bin Не будучи в мой $PATH.

1) Почему brew не устанавливать global npm bin путь к пути? Может, и так, но что-то ... --12--> does портит его. Где я могу это найти?
2) должен ли я это сделать? (Добавление :/usr/local/share/npm/bin экспортированных $PATH на ~/.zshrc)

похоже, это не правильный способ сделать это, потому что если я установлю что-то еще позже (используя Homebrew или что-то еще), мне нужно будет добавить его в мой сценарий запуска zsh чтобы задать путь. Я думаю, в этом конкретном случае это просто вопрос npm install -g не делать правильные символические ссылки в" правильном " месте (например,/usr/local/bin может быть).

Я думаю, что я сделаю это вручную построить символические ссылки внутри /usr/local/bin для любых программ, с которыми у меня проблемы, и это должно быть достаточно хорошо для моих целей.

8 ответов


расширение PATH С:

export PATH=/usr/local/share/npm/bin:$PATH

не ужасная идея. Сказав это, вы не должны этого делать.

выполнить это:

npm config get prefix

значение по умолчанию в OS X -/usr/local, что означает, что npm будет символически ссылаться на двоичные файлы в /usr/local/bin, который уже должен быть на вашем PATH (особенно если вы используете Homebrew).

так:

  1. npm config set prefix /usr/local если это что-то другое, и
  2. не используйте sudo С НПМ! Согласно jslint документы, вы просто должны быть в состоянии npm install его.

если вы установили npm как sudo (sudo brew install), попробуйте переустановить его с помощью простого ol'brew install. Homebrew должен помочь вамsudo-бесплатно.


потратил некоторое время на эту проблему, и переключатель пути не помог. Моя проблема доморощенного/узел/НПМ баг нашли здесь https://github.com/npm/npm/issues/3794

если вы уже установили узел с помощью Homebrew, попробуйте * * * * обратите внимание на комментарии, что это может быть небезопасно. Это сработало для меня, но могло иметь непредвиденные последствия. Также кажется, что последняя версия Homebrew правильно устанавливает npm. Так что, скорее всего, я попробую brew update, brew doctor, brew upgrade node etc перед trying****:

npm update -gf

или, если вы хотите установить узел с Homebrew и иметь работу npm, используйте:

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh

Я использую brew, и префикс уже был установлен как:

$ npm config get prefix
/Users/[user]/.node

Я заметил, что папка bin и lib принадлежит root, что предотвратило обычную установку non sudo, поэтому я повторно владел ими пользователю

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin

тогда я просто добавил путь к моему .bash_profile, который находится в /Users / [user]

PATH=$PATH:~/.node/bin

brew не должен требовать, чтобы вы использовали sudo даже при запуске npm с -g. Это может создать больше проблем в будущем.

Как правило, заваривать или порт позволяют обновить путь, чтобы он не рисковал испортить ваш .zshrc, .bashrc следующее, .cshrc, или любой вкус раковины вы используете.


любой получил ту же проблему, что и конфликт между brew и npm Пожалуйста, проверьте это решение https://gist.github.com/DanHerbert/9520689


попробуй:

PATH=$PATH:~/npm/bin

а затем выполните тест, запустив express в командной строке. Это сработало для меня.


Если вы связали пакеты узлов с помощью команды sudo

затем перейдите в папку, где node_modules установлены глобально.

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

Windows XP - %USERPROFILE%\Application Data\npm\node_modules Windows 7 - В папке %AppData%\команду npm\node_modules, в

а затем выполните команду

ls -l

Это даст список всех глобальных node_modules, и вы можете легко увидеть связанные модули узлов.


sudo brew больше не является опцией, поэтому, если вы установите с brew в этот момент, Вы получите 2 действительно неприятные вещи: A: он любит устанавливать в /usr/local/opts или согласно этому, / usr / local / shared. Сначала это не имеет большого значения, но у меня были проблемы с Node PATH, особенно когда я установил lint. B: вы застряли с командами sudo, пока вы не удалите и не установите его таким образом, или вы можете получить стек из об

Я рекомендую этот метод над параметром стека, потому что он готов к работе, если у вас есть несколько проектов. Если вы идете с предварительно подготовленным стеком MEAN, вам придется настроить виртуальные хосты в httpd.conf (больше боли в этом стеке, чем XAMPP)plust обычное обновление ваших дополнительных/vhosts.conf и / etc / hosts для каждого дополнительного проекта, если вы не хотите переустанавливать и перезагружать сервер, когда вы закончите обновление.