Префикс глобального пути npm
Я более осторожен, чем обычно, потому что меня смущало поведение npm
в прошлом.
Я на Mac и установил node.js через brew install node
.
Теперь, когда я хочу запустить jslint.js
в командной строке в качестве команды jslint
я обнаружил, что канонический способ сделать это - sudo npm install -g 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
[email protected] /usr/local/share/npm/lib/node_modules/jslint
└── [email protected] ([email protected])
впоследствии
$ jslint ply.js
zsh: command not found: jslint
из-за того, что /usr/local/share/npm/bin
не находится в моем $PATH
.
1) Почему brew
не установил глобальный путь к npm
bin
? Может быть, это так, но что - то zsh
делает Мессинг его. Где я могу найти это?
2) Должен ли я сделать это? (Добавьте : /usr/local/share/npm/bin
к экспортированному $PATH
внизу моего ~/.zshrc
)
Кажется, что это неправильный способ сделать это, потому что, если я установлю что-то еще позже (используя Homebrew или что-то еще), мне нужно будет добавить его в мой скрипт запуска zsh, чтобы указать путь. Я предполагаю, что в данном конкретном случае это просто вопрос npm install -g
не npm install -g
правильные символические ссылки в "правильном" месте (например, /usr/local/bin
).
Я думаю, что я сделаю вручную создание символических ссылок внутри /usr/local/bin
для любых программ, с которыми у меня возникли проблемы, и это должно быть достаточно для моих целей.
РЕДАКТИРОВАТЬ: я обновляю это в 2019 году, потому что этот старый вопрос популярен, но теперь устарел как с точки зрения моего личного рабочего процесса, а также с точки зрения того, как лучше всего установить узел и управлять его различными зависимостями.
Мой личный рабочий процесс теперь заключается в использовании установщика, полученного из nodejs.org, для установки узла в системах. Я на самом деле доверяю этому больше, чем самому пакету homebrew, потому что он лучше знает, как управлять файлами. Если вы хотите изменить системный узел с 8.10 на 10.15, будь то на Mac или Windows, просто загрузите установщик с nodejs.org для 10.15 для вашей ОС. По моему опыту, попытка обновить узел, установленный с помощью homebrew, всегда была более сложным подходом.
Кроме того, самое важное, на что следует обратить внимание, это то, что использование sudo, как показано в моем примере установки jslint для npm выше, крайне не рекомендуется; Я совершенно уверен, что пакеты homebrew никогда не должны устанавливаться или взаимодействовать с суперпользователем. Это не должно быть необходимым, и приведет к головным болям разрешения файла!
Кроме того, я рекомендую ESLint поверх jslint и не использовал jslint в течение многих лет.
Ответы
Ответ 1
Расширение 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
с npm! Согласно jslint docs, вы должны просто иметь возможность npm install
его.
Если вы установили npm как sudo (sudo brew install
), попробуйте переустановить его с помощью простого ol 'brew install
. Предполагается, что Homebrew поможет вам sudo
-бесплатно.
Ответ 2
Провел некоторое время по этой проблеме, а переключатель PATH не помог. Моя проблема была найденной здесь ошибкой Homebrew/ node/npm - https://github.com/npm/npm/issues/3794
Если вы уже установили node с помощью Homebrew, попробуйте **** Обратите внимание, что это может быть небезопасно. Это работало для меня, но могло иметь непреднамеренные последствия. Также кажется, что последняя версия Homebrew правильно устанавливает npm. Вероятно, я попробовал бы brew update
, brew doctor
, brew upgrade node
и т.д. Перед тем, как попробовать ****:
npm update -gf
Или, если вы хотите установить node с Homebrew и работать с npm, используйте:
brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh
Ответ 3
Я использую brew, и префикс уже был установлен:
$ npm config get prefix
/Users/[user]/.node
Я заметил, что папка bin и lib принадлежит root, что предотвращает обычную установку un sudo, поэтому я повторно использовал их для пользователя
$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin
Затем я просто добавил путь к моему .bash_profile, который находится в /Users/ [user]
PATH=$PATH:~/.node/bin
Ответ 4
brew не требует, чтобы вы использовали sudo даже при запуске npm с -g. Это могло бы создать больше проблем в будущем.
Как правило, brew или порт позволяют вам обновлять свой путь, чтобы он не рисковал испортить ваши .zshrc,.bashrc,.cshrc или любой другой вкус оболочки, которую вы используете.
Ответ 5
Любой из них получил ту же проблему, что и конфликт между brew и npm
Проверьте это решение https://gist.github.com/DanHerbert/9520689
Ответ 6
Попробуйте запустить:
PATH=$PATH:~/npm/bin
а затем выполните тест, запустив express
в командной строке. Это сработало для меня.
Ответ 7
Если вы связали пакеты node с помощью команды sudo
Затем перейдите в папку, где node_modules установлены глобально.
В системах Unix они обычно помещаются в /usr/local/lib/ node или/usr/local/lib/node_modules при установке по всему миру. Если вы установили переменную среды NODE_PATH в этот путь, модули можно найти с помощью node.
Windows XP -% USERPROFILE%\Данные приложения \npm\node_modules
Windows 7 -% AppData%\npm\node_modules
а затем запустите команду
ls -l
Это даст список всех глобальных node_modules, и вы можете легко увидеть связанные модули node.
Ответ 8
sudo brew больше не является вариантом, поэтому, если вы установите с помощью brew, на данный момент вы получите 2 действительно неприятных вещи:
A: ему нравится устанавливать в /usr/local/opts
или в соответствии с этим, /usr/local/shared. Сначала это неважно, но у меня были проблемы с node PATH, особенно когда я установил lint.
B: вы как бы застряли в командах sudo, пока не удалите и не установите его таким образом, или вы можете получить стек из Bitnami
Я рекомендую этот метод над опцией стека, потому что он готов к работе, если у вас несколько проектов. Если вы идете с готовым стеком MEAN, вам придется настраивать виртуальные хосты в httpd.conf(больше боли в этом стеке, чем XAMPP), чтобы обычное обновление вашего дополнительного /vhosts.conf и/etc/hosts для каждого дополнительного проект, если вы не захотите повторить и перезагрузить свой сервер, когда вы закончите обновлять вещи.
Ответ 9
Мне удалось исправить ошибку 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
Надеюсь это поможет!
Ответ 10
Простое решение...
Просто введите команду ниже:
-
sudo npm config get prefix
если это не что-то вроде этого /usr/local
, то вам нужно исправить это с помощью команды ниже.
-
sudo npm config set prefix/usr/local
...
Теперь это 100% работает нормально