Префикс глобального пути 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

Простое решение...

Просто введите команду ниже:

  1. sudo npm config get prefix

    если это не что-то вроде этого /usr/local, то вам нужно исправить это с помощью команды ниже.

  2. sudo npm config set prefix/usr/local...

Теперь это 100% работает нормально