Префикс глобального пути 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 не установить глобальный npmbin путь к пути? Может быть, это так, но что-то 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).

Так:

  1. npm config set prefix /usr/local если это что-то еще, и
  2. Не использовать 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 в командной строке. Это сработало для меня.

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

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

  1. sudo npm config get prefix

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

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

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

Другие вопросы по тегам