Невозможно использовать NVM от root (или sudo)
Я упомянул, что мое приложение использует разную версию NodeJS при работе от sudo
.
$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre
Этот v0.11.8-pre вызвал у меня некоторые проблемы, поэтому я определенно не хочу его использовать, но я не могу изменить его для root.
$ sudo nvm use v0.10.23
sudo: nvm: command not found
Я попытался установить nvm у пользователя root, но получил ошибку "NVM уже установлен", но nvm не найден при работе с sudo
. В чем моя проблема?
Ответы
Ответ 1
Ниже приведен список команд (источник: digitalocean), как представляется, устраняет проблему
n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local
Вышеприведенная команда немного сложна, но все, что она делает, это копирование любой версии node, которую вы активировали с помощью nvm в каталог /usr/local/
(где пользователь установил глобальные файлы, должен жить на VPS Linux) и установить разрешений, чтобы все пользователи могли получить к ним доступ.
Надеюсь, это поможет!
Ответ 2
Мое решение состоит в создании символических ссылок из версий node
и npm
, которые я использую для /usr/local/bin
:
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"
Это делает доступными для всех пользователей npm
и node
.
Ответ 3
Ваша проблема в том, что nvm
не находится в пути, когда вы используете sudo
.
Итак, тип
$ which nvm
и результат будет выглядеть как
/home/abc/mynvm/nvm
Попробуйте снова с sudo
:
sudo /home/abc/mynvm/nvm use v0.10.23
Я предполагаю, что вы столкнулись с проблемой, что пользователь root не может найти 0.10.13-версию, но позволяет увидеть следующее сообщение об ошибке...
Ответ 4
Я пробовал то же самое на своей машине, где у меня есть nvm
, и у меня есть отличный ответ:
$ sudo node --version
sudo: node: command not found
Я предполагаю, что вы установили node 0.11 вне nvm. (Через менеджера пакетов или даже из источника)
Следовательно, запуск node через sudo вместо этого заменит этот автономный node.
Это имеет смысл или я ошибаюсь?
Ответ 5
У меня тоже была твоя проблема. Наконец, я работал над этим. Вот мое решение:
- Удалите nvm и nodejs. Вот несколько полезных ссылок: Удаление nvm. Если вы установили nodejs с помощью apt-get, вы можете удалить его с помощью команды
apt-get purge nodejs
.
- Установите глобальный nvm. Смотрите эту страницу: nvm global. Как говорится, "Standard nvm знает трудности в многопользовательской или корневой среде".
После перезапуска терминала вы можете запустить команду sudo nvm ls
.
Ответ 6
Основная причина заключается в том, что nvm
не является реальной программой. Это функция bash, которая загружается пользователем .profile
, .bashrc
или... Таким образом, sudo
не автоматически выбирает его из $PATH, как и большинство других программ.
Альтернативный node менеджер версий n
: https://github.com/tj/n. Это настоящая программа, поэтому sudo
выберет ее через $PATH без каких-либо хаков (пока sudo
имеет /usr/local/bin
в своем $PATH).
sudo npm install -g n # install 'n' globally
which n # should be /usr/local/bin/n
sudo n lts # need sudo to switch node versions
node --version # v6.10.0
sudo node --version # v6.10.0
Ответ 7
Установить nvm глобально с помощью
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash
Ответ 8
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3