sudo: npm: команда не найдена

202

Я пытаюсь обновить до последней версии узла. Я следую инструкциям на http://davidwalsh.name/upgrade-nodejs

Но когда я сделаю:

sudo npm install -g n

Я получаю ошибку:

sudo: npm: command not found

npm работает без sudo. Когда я делаю:

whereis node

Я вижу:

node: /usr/bin/node /usr/lib/node /usr/bin/X11/node /usr/local/node

Бег:

which npm

шоу:

/usr/local/node/bin/npm

Я попробовал решение на https://stackoverflow.com/a/5062718/1246159

Но я все еще получаю ту же ошибку. Я также посмотрел на файл / etc / sudoers и соответствующую строку:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Это выглядит хорошо для меня. Как я могу заставить NPM работать с командой sudo?

отметка
источник
4
Это работает? sudo /usr/bin/npm install -g n
Робертклеп
2
Можете ли вы попробовать переустановить узел? Похоже, вы удалили npm.
Джефф Слойер
1
Возможно, вы добавили /usr/local/node/binв свой $PATH, но npmдолжны быть установлены в /usr/local/bin. Первый каталог не в secure_pathкотором объясняет, почему sudoне могу найти его.
Робертклеп
1
Используя nvmна Ubuntu здесь - с комментарием @robertklep, я попытался, sudo /home/${user}/.nvm/version/node/${version}/bin/npm installи это сработало.
Став Пан Геффен
2
Это решило мою проблему путем переустановки из следующего пакета. nodejs.org/en/download
Маргхуб Сулеман

Ответы:

125

Файл npm должен быть в /usr/local/bin/npm. Если его там нет, снова установите node.js с пакетом на их сайте . Это сработало в моем случае.

инга
источник
Спасибо. Если вы устанавливаете узел на другие диски с данными, где ОС не установлена, вы не сможете найти этот путь.
Хардик Даржи
1
в случае Mac OS с homebrew .. два шага, чтобы сделать (1), какой узел (2), какой npm, который должен быть и в / usr / local / bin (где homebrew устанавливает узел / символические ссылки + npm) ... чтобы решить .. попробуйте (1) brew doctor (2) узел переустановки brew, если он все еще дает проблемы .. проверьте ваш путь (echo $ PATH). у вас должно быть несколько расположений бинов, которые указывают на различные установки узлов ... если это так ... очистите (как в make itater) ваш ~ / .bashrc / ~ / .bash_profile, так что / usr / local / bin есть загружен без другого, указывающего на случайную установку узла.
Джимми М.Г. Лим
3
Это частичное решение. Проблема возникает при ручной установке узла. Вы должны программно связать каждый установленный бинарный файл в / usr / bin или / usr / local / bin. Установка пути в bashrc рута не будет работать, так как он не читается во время sudo, поэтому это единственный способ, если вы не устанавливаете пакет.
Креветка
как сказал @shrimpwagon, в нижней части инструкции вручную указывается ссылка "sudo ln -s / usr / local / lib / nodejs / node- $ VERSION- $ DISTRO / bin / node / usr / bin / node sudo ln -s / usr / local / lib / nodejs / node- $ VERSION- $ DISTRO / bin / npm / usr / bin / npm sudo ln -s / usr / local / lib / nodejs / узел- $ VERSION- $ DISTRO / bin / npx / usr / bin / npx "
Джеймс Нельсон
170

Я должен был сделать

sudo apt-get install npm

это сработало для меня.

Velocibadgery
источник
6
Трудно понять, что ты хочешь выразить.
крошечный солнечный свет
4
Это устарело. Для меня работали следующие команды: github.com/nodesource/distributions#debinstall # Использование Ubuntu curl -sL deb.nodesource.com/setup_5.x | sudo -E bash - sudo apt-get install -y nodejs # Использование Debian в качестве корневого curl -sL deb.nodesource.com/setup_5.x | bash - apt-get install -y nodejs
Хамед
4
@tinysunlight Я не уверен, что неясно. Оператор говорит, что команда npm отсутствует. Эта команда устанавливает команду npm.
Velocibadgery
7
Это не правильный ответ на вопрос, потому что это очевидно из операционной системы, которая npmуже установлена, но недоступна при вызове через sudo. С этим решением вы переустановите npm, который уже существует. Это борьба с симптомами, а не поиск причины. Я понимаю, что это может исправить некоторые вещи, но это вводит в заблуждение, стоя так.
Доминик
4
Когда я установил узел с помощью NVM в Ubuntu 18.10, sudo не распознает npm как команду. sudo apt-get install npmработал на меня.
AlienKevin
91

Для пользователей MAC, следующие шаги работали для меня.

$ brew update
$ brew uninstall node
$ brew install node
$ brew postinstall 
Гао
источник
5
brew uninstall nodeНе работал для меня, но я продолжал с brew install nodeи brew postinstallи исправили проблему. Спасибо
Тревор
2
Что именно делает brew postinstall?
Оливер Д
в Homebrew версии 2.2.14 brew postinstallявляется избыточным
Арслан Хан
63

У меня такая же проблема; Вот команды, чтобы исправить это:

  • sudo ln -s /usr/local/bin/node /usr/bin/node
  • sudo ln -s /usr/local/lib/node /usr/lib/node
  • sudo ln -s /usr/local/bin/npm /usr/bin/npm
  • sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf
Vasanth Umapathy
источник
2
Работал для меня на CentOS 7
hirikarate
4
У меня работал Ubuntu 16.04.1 LTS. Я использую NVM, поэтому первый путь был к тому месту, где NVM установил узел и npm (путь включает версию %HOME%/.nvm/versions/node/v7.4.0/bin/npm). К сожалению, мне придется ссылаться на этот ответ каждый раз, когда я обновляюсь с помощью NVM, из-за того, как изменится версия в пути
kas
1
Это решило это и для меня! Первоначально опубликовано в Переполнение стека: В EC2: команда узла sudo не найдена, но узел без sudo
Доминик
2
@kas sudo ln -s $(whereis node) /usr/bin/node И так далее. в вашем профиле bash.
Аравинд Воггу
Работал для меня в экземпляре AWS ec2.
Чираг Пурохит
26

ВНИМАНИЕ (редактировать)

Делать это chmod 777довольно радикальное решение. Попробуйте это сначала, по одному, и остановитесь, когда работаете:

  • $ sudo chmod -R 777 /usr/local/lib/node_modules/npm
  • $ sudo chmod -R 777 /usr/local/lib/node_modules
  • $ sudo chmod g+w /usr/local/lib
  • $ sudo chmod g+rwx /usr/local/lib

$ brew postinstall node это единственная часть установки, где у меня возникнет проблема

Permission denied - /usr/local/lib/node_modules/npm/.github

Так что я

// !! READ EDIT ABOVE BEFORE RUNNING THIS CODE !!
$ sudo chmod -R 777 /usr/local/lib
$ brew postinstall node

и альт, нпм теперь связан

$ npm -v
3.10.10

дополнительный

Если вы использовали -R 777на Lib моя рекомендация будет установить вложенные файлы и директории установки по умолчанию:

  • $ find /usr/local/lib -type f -print -exec chmod 644 {} \;
  • $ find /usr/local/lib -type d -print -exec chmod 755 {} \;
  • $ chmod /usr/local/lib 755
Jacksonkr
источник
3
@Jacksonkr ..... Вы только что порекомендовали chmoding 777 всей локальной папке / lib?
Сфратини
Каким chmodдолжен быть этот каталог?
tim_xyz
1
@tim_xyz drwxr-xr-xпо умолчанию для lib. Тем не менее, НЕ используйте рекурсивную функцию -Rпри возврате папки.
Jacksonkr
Спасибо! sudo chmod -R 777 / usr / local / lib / node_modules работал для меня
Hisagr
18

Я должен был сделать следующее:

  1. brew update
  2. brew uninstall node
  3. Посетите https://nodejs.org/en/ скачать файл
  4. Установите скачанный файл
maudulus
источник
2
Вы герой.
Абдулазиз Нур
8

Для пользователей CentOS это работает для меня:

sudo yum install npm
江南 消夏
источник
1
проблема этого подхода в том, что в Fedora, например, он сильно устарел в репозиториях dnf / yum
ACV
2
В CentOS 7 необходимо сначала включить репо EPEL:yum install epel-release; yum install npm
hudolejev
8

Для того, чтобы установить пакеты npm глобально с разрешением sudo, /usr/bin/npmдолжен быть доступен. Если npmсуществует в другом каталоге, создайте программную ссылку, например:

sudo ln -s /usr/local/bin/npm /usr/bin/npm

Работает на Fedora 25, node8.0.0 и npm5.0.0

Пракаш Рамасами
источник
6

В macOS это сработало для меня:

brew reinstall node
friederbluemle
источник
1
Извините, только что заметил, что вопрос помечен unix, но он все еще может быть полезен, так как это лучший результат поиска Google для "команда macos npm не найдена"
friederbluemle
5

Для Debian после установки узла введите

curl -k -O -L https://npmjs.org/install.sh    
ln -s /usr/bin/nodejs /usr/bin/node  
sh install.sh
Шахарьяр Зафар
источник
5

Если вы установили узел / npm с помощью nvm, файл конфигурации среды nvm должен быть запущен, прежде чем вы сможете использовать любой из пакетов.

Обычно это находится в ~ / .nvm / nvm.sh.

Чтобы запустить это автоматически, включите:

source ~/.nvm/nvm.sh

в файле .bash_profile для вашего пользователя

Если затем вы захотите использовать sudo с этим пользователем, обязательно включите параметр -i, чтобы sudo установил пользовательскую среду. например

sudo -iu jenkins npm install grunt-cli
Гаррет МакДейд
источник
4

просто переустановите.

На RHEL, CentOS и Fedora

sudo yum remove nodejs npm
sudo dnf remove nodejs npm   [On Fedora 22+ versions]

затем

yum -y install nodejs npm
dnf -y install nodejs npm   [On Fedora 22+ versions]

просто! .. теперь и узел, и npm работают как шарм!

Брайан Санчес
источник
3

Я решил эту проблему

apt-get install npm2deb
Игорь Демянюк
источник
1
что это за ответ? npm2deb - третья сторона
Бо
1
он не является полностью «доверенным», так как в третьей стороне может быть с большей вероятностью взломан, чем из npm напрямую из источника. я ничего не знаю о npm2deb, но подумайте, если бы вы хотели использовать его в своей компании, они, вероятно, были бы строги в его проверке
Kyle Calica-St
Это очевидно для всех.
Игорь Демянюк
1

У меня была такая же проблема, причина в том, что при установке узла не был установлен менеджер пакетов npm. Это было вызвано из-за следующей ошибки: В процессе установки есть шаг, называемый «Выборочная установка», здесь у вас есть возможность выбрать один из следующих вариантов: 1) Среда выполнения Node.js (эта опция выбрана по умолчанию). 2) менеджер пакетов npm 3) ярлыки онлайн документации. 4) Добавить в путь. Если вы продолжите в том же духе, менеджер пакетов npm не будет установлен, и, следовательно, вы получите ошибку.

Решение: выберите диспетчер пакетов npm, когда получите эти опции. Это сработало для меня.

Саураб Шетти
источник
1

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

/usr/local/bin/npm -> /opt/node-v4.6.0-linux-x64/bin/npm
/usr/local/bin/node -> /opt/node-v4.6.0-linux-x64/bin/node
mipasov
источник
1

У меня тоже была такая же проблема в Хомстеде, и я пробовал много способов. Я пробовал с

sudo apt-get установить nodejs

Я получаю следующую ошибку:

The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
       Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
       Depends: node-ansi (>= 0.3.0-2) but it is not going to be installed
       Depends: node-ansi-color-table but it is not going to be installed
       Depends: node-archy but it is not going to be installed
       Depends: node-block-stream but it is not going to be installed
       Depends: node-fstream (>= 0.1.22) but it is not going to be installed
       Depends: node-fstream-ignore but it is not going to be installed
       Depends: node-github-url-from-git but it is not going to be installed
       Depends: node-glob (>= 3.1.21) but it is not going to be installed
       Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
       Depends: node-inherits but it is not going to be installed
       Depends: node-ini (>= 1.1.0) but it is not going to be installed
       Depends: node-lockfile but it is not going to be installed
       Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
       Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
       Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
       Depends: node-gyp (>= 0.10.9) but it is not going to be installed
       Depends: node-nopt (>= 3.0.1) but it is not going to be installed
       Depends: node-npmlog but it is not going to be installed
       Depends: node-once but it is not going to be installed
       Depends: node-osenv but it is not going to be installed
       Depends: node-read but it is not going to be installed
       Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
       Depends: node-request (>= 2.25.0) but it is not going to be installed
       Depends: node-retry but it is not going to be installed
       Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
       Depends: node-semver (>= 2.1.0) but it is not going to be installed
       Depends: node-sha but it is not going to be installed
       Depends: node-slide but it is not going to be installed
       Depends: node-tar (>= 0.1.18) but it is not going to be installed
       Depends: node-underscore but it is not going to be installed
       Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Наконец то попробовал с

sudo apt-get dist-upgrade

Работало нормально.

root@homestead:/usr/local/bin# npm -v
3.10.10

root@homestead:/usr/local/bin# node -v
v6.13.0
Thowfeek
источник
1

Мое решение:

sudo -E env "PATH=$PATH" n stable

У меня отлично работает.

Нашел здесь: https://stackoverflow.com/a/29400598/861615

Это происходит потому, что вы изменили каталог глобальных пакетов по умолчанию

xargr
источник
1

Работа для меня Устранение ошибок разрешений EACCES при глобальной установке пакетов

Чтобы минимизировать вероятность ошибок разрешений, вы можете настроить npm для использования другого каталога. В этом примере вы создадите и будете использовать скрытый каталог в вашем домашнем каталоге.

Сделайте резервную копию вашего компьютера. В командной строке в своем домашнем каталоге создайте каталог для глобальных установок:

 mkdir ~/.npm-global

Настройте npm для использования нового пути к каталогу:

 npm config set prefix '~/.npm-global'

В предпочитаемом вами текстовом редакторе откройте или создайте файл ~ / .profile и добавьте следующую строку:

 export PATH=~/.npm-global/bin:$PATH

В командной строке обновите системные переменные:

 source ~/.profile

Чтобы протестировать новую конфигурацию, установите пакет глобально, не используя sudo:

 npm install -g jshint
eustatos
источник
Это отлично сработало и избавило от лишних хлопот!
Сумомо
0

Добавлен двоичный путь npm к пути sudo с использованием visudo и редактированием «secure_path»

Теперь "sudo npm" работает

mauricio777
источник
0

Удалить узел полностью:

  brew uninstall --force node

Установите снова:

brew install node;
which node # => /usr/local/bin/node
export NODE_PATH='/usr/local/lib/node_modules'
ASHISH RANJAN
источник
0

В случае, если это может быть полезно для тех, кто использует rh-*пакеты, это работает для меня:

sudo ln -s /opt/rh/rh-nodejs8/root/usr/bin/npm /usr/local/bin/npm
Лайонел Т
источник
0

Так как я установил node.js, используя файл .tar, доступный на node.js, мне пришлось указать местоположение каталога узла:

~ / .Bashrc

root с помощью перехода от обычного пользователя к root с помощью команды:

судо

Затем мне пришлось добавить путь к узлу, где я извлек его в файл .bashrc, как показано ниже: введите описание изображения здесь

затем восстановил .bashrc используя

, ~ / .Bashrc

там после

npm: command not found

ушел

МОХАММАД ВАЗЕМ
источник
0

Для меня ни один из методов, упомянутых выше с использованием Homebrew, не работал на macOS. Итак, я удалил узел, используя Homebrew, скачал пакет узла с https://nodejs.org/en/download/ и установил его. Оно работало завораживающе.

Manas
источник
-8

Установи node.js и просто запусти

npm install -g bower 

из вашего проекта реж

YathuGulan Uthayan
источник