префикс глобального пути 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 npmbin путь к пути? Может и так, но что-то zsh не испортил. Где я могу быть в состоянии найти, что?
2) должен ли я это сделать? (Добавить :/usr/local/share/npm/bin экспортированных $PATH на ~/.zshrc)

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

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

8 111

8 ответов:

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

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

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

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

npm config get prefix

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

так:

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

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

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

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

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. это может создать больше проблем в будущем.

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

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

попробуй:

PATH=$PATH:~/npm/bin

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

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

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

на UNIX-системах они обычно помещаются в /usr/местные/библиотека/узел или /usr/местные/библиотека 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 для каждого дополнительного проекта, если вы не хотите переустанавливать и перезапускать свой сервер, когда вы закончите обновление.