Подтвердить что ты не робот

Невозможно использовать 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. В чем моя проблема?

4b9b3361

Ответ 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