Префикс глобального пути npm
Я более осторожен, чем обычно, потому что меня смущает поведение npm
в прошлом.
Я на Mac и установил node.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
не установить глобальный npm
bin
путь к пути? Может быть, это так, но что-то zsh
делает это испортить. Где я могу найти это?
2) Должен ли я сделать это? (Append :/usr/local/share/npm/bin
на экспорт $PATH
в нижней части моего ~/.zshrc
)
Кажется, что это неправильный способ сделать это, потому что, если я установлю что-то еще позже (используя Homebrew или что-то еще), мне потребуется добавить его в мой сценарий запуска zsh, чтобы указать путь. Я думаю, что в данном конкретном случае это просто вопрос npm install -g
не делает правильные символические ссылки в "правильном" месте (например, /usr/local/bin
может быть).
Я думаю, что я буду делать, это вручную создавать символические ссылки внутри /usr/local/bin
для любых программ, с которыми у меня проблемы, и это должно быть достаточно для моих целей.
12 ответов
Расширение вашего PATH
с:
export PATH=/usr/local/share/npm/bin:$PATH
не страшная идея Сказав это, вы не должны делать это.
Запустите это:
npm config get prefix
По умолчанию на OS X это /usr/local
, что означает, что npm будет символически связывать двоичные файлы в /usr/local/bin
, который уже должен быть на вашем PATH
(особенно если вы используете Homebrew).
Так:
npm config set prefix /usr/local
если это что-то еще, и- Не использовать
sudo
с нпм! Согласно документации JSLINT, вы должны просто иметь возможностьnpm install
Это.
Если вы установили npm как sudo (sudo brew install
), попробуйте переустановить его с простым brew install
, Доморощенный должен помочь вам sudo
-свободно.
Потратил некоторое время на эту проблему, и переключатель PATH не помог. Моей проблемой была ошибка Homebrew/node/npm, найденная здесь - https://github.com/npm/npm/issues/3794
Если вы уже установили узел с помощью Homebrew, попробуйте **** примечание в комментариях, что это может быть небезопасно. Это сработало для меня, но могло иметь непредвиденные последствия. Также кажется, что последняя версия Homebrew правильно устанавливает npm. Скорее всего, я бы попробовал brew update
, brew doctor
, brew upgrade node
и т.д., прежде чем пытаться ****:
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, что препятствовало обычной установке без sudo, поэтому я передал их пользователю
$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin
Затем я просто добавил путь к моему.bash_profile, который находится в /Users/[user]
PATH=$PATH:~/.node/bin
Мне удалось исправить ошибку Vue Cli no command, выполнив следующие действия:
- В терминале
sudo nano ~/.bash_profile
редактировать свой профиль Bash. - добавлять
export PATH=$PATH:/Users/[your username]/.npm-packages/bin
- Сохранить файл и перезапустить терминал
- Теперь вы должны быть в состоянии использовать
vue create my-project
а такжеvue --version
и т.п.
Я сделал это после того, как установил последнюю версию Vue Cli с https://cli.vuejs.org/
Я обычно использую пряжу, но я установил это глобально с npm npm install -g @vue/cli
, Вы также можете использовать пряжу, если хотите yarn global add @vue/cli
Примечание. Возможно, вам придется сначала удалить его глобально, если он у вас уже установлен: npm uninstall -g vue-cli
Надеюсь это поможет!
brew не требует использования sudo даже при запуске npm с параметром -g. Это может создать больше проблем в будущем.
Как правило, brew или port позволяют вам обновлять ваш путь, чтобы не рисковать испортить ваш.zshrc, .bashrc, .cshrc или любой другой тип оболочки, который вы используете.
В более новых версиях MacOS вам нужно отредактировать файл .zshrc, а не .bash_profile :
В вашем терминалеnano ~/.zshrc
затем добавьте строку:
export PATH=$PATH:/Users/[your username]/.npm-packages/bin
Любая проблема, связанная с конфликтом между brew и npm, пожалуйста, проверьте это решение https://gist.github.com/DanHerbert/9520689
sudo brew больше не является опцией, поэтому, если вы установите с brew на этом этапе, вы получите 2 действительно неприятных вещи:
A: он любит устанавливать в /usr/local/opts
или, в соответствии с этим, /usr/local/shared. Сначала это не имеет большого значения, но у меня были проблемы с PATH, особенно когда я установил lint.
B: вы как бы застряли с командами sudo, пока не удалите и не установите его таким образом, или вы не сможете получить стек от Bitnami
Я рекомендую этот метод поверх стека, потому что он готов к работе, если у вас есть несколько проектов. Если вы используете готовый MEAN-стек, вам нужно будет настроить виртуальные хосты в httpd.conf (больше проблем в этом стеке, чем в XAMPP), просто добавьте обычные обновления ваших extra / vhosts.conf и / etc / hosts для каждого дополнительного проект, если вы не хотите переписать и перезапустить свой сервер, когда вы закончите обновлять вещи.
Я удалил узел из доморощенного на M1 Apple Silicon и вместо этого использовал установщик Mac с https://nodejs.org/en/download/ . После этого я смог установить с помощью npm и npx.
Если вы связали пакеты узлов с помощью команды 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, и вы сможете легко увидеть связанные модули узлов.
Попробуйте запустить:
PATH=$PATH:~/npm/bin
а затем сделать тест, запустив express
в командной строке. Это сработало для меня.
Простое решение...
Просто введите команду ниже:
sudo npm config get prefix
если это не что-то вроде этого
/usr/local
, чем вам нужно это исправить используя команду ниже.sudo npm config set prefix /usr/local
...
Теперь он работает на 100%