node.js - update - No se puede usar NVM desde la raíz(o sudo)
update nvm (10)
Segun README
Cuando use nvm no necesita
sudo
para instalar globalmente un módulo connpm -g
, así que en lugar de hacersudo npm install -g grunt
, haga en cambionpm install -g grunt
Necesito sudo npm?
En mi caso, necesito sudo npm run start
que necesita acceso a algún archivo que requiera acceso de root. De acuerdo con este tema ,
No usas
sudo
. En su lugar, debe hacer clic en chmod / chown el archivo para que el usuario que tiene nvm tenga acceso al archivo ;.
En suma
El mantenedor de nvm cree firmemente que no necesitamos sudo
: P
He mencionado que mi aplicación usa una versión diferente de NodeJS cuando se ejecuta desde sudo
.
$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre
Este v0.11.8-pre me causó algunos problemas, por lo que definitivamente no quiero usarlo, pero no puedo cambiarlo por root.
$ sudo nvm use v0.10.23
sudo: nvm: command not found
He intentado instalar nvm desde el usuario root, pero obtuve el error "NVM ya instalado", pero aún no se encuentra nvm cuando se ejecuta desde sudo
. Cual es mi problema
He intentado lo mismo en mi máquina donde también tengo nvm
y tengo una respuesta ligeramente diferente:
$ sudo node --version
sudo: node: command not found
Mi conjetura es que ha instalado el nodo 0.11 fuera de nvm. (A través del gestor de paquetes o incluso desde la fuente )
Por lo tanto, la ejecución del nodo a través de sudo recogerá este nodo independiente en su lugar.
¿Tiene sentido o me equivoco?
Instala nvm globalmente con
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash
La razón fundamental es porque nvm
no es un programa real. Es una función de bash que se carga en el .profile
de usuario, .bashrc
o ... Por lo tanto, sudo
no lo selecciona automáticamente desde $ PATH como la mayoría de los otros programas.
Un administrador de versiones de nodo alternativo es n
: https://github.com/tj/n . Ese es un programa real, por lo que sudo
lo recogerá a través de $ PATH sin hacks (siempre que sudo
tenga /usr/local/bin
en su $ 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
La siguiente lista de comandos (fuente: digitalocean ) parece solucionar el problema
n=$(which node); /
n=${n%/bin/node}; /
chmod -R 755 $n/bin/*; /
sudo cp -r $n/{bin,lib,share} /usr/local
El comando anterior es un poco complicado, pero todo lo que hace es copiar cualquier versión del nodo que tenga activo a través de nvm en el directorio /usr/local/
(donde los archivos globales instalados por el usuario deberían estar en un VPS de Linux) y configurar los permisos para que Todos los usuarios pueden acceder a ellos.
¡Espero que esto ayude!
La solución más fácil para esto será simplemente golpear el ejecutable nvm.sh donde sea que esté.
sudo /home/ubuntu/.nvm/nvm.sh install node
Esto funciona bien para mí (asumiendo que esa es la ruta de instalación).
El procedimiento de instalación completo se vería como
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && /. "$NVM_DIR/nvm.sh"
Y luego puede ejecutar el comando anterior para golpear el nvm.sh recién instalado
Mi solución es crear enlaces simbólicos a partir de las versiones de node
y npm
que estoy usando para /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"
Esto hace que npm
y node
estén disponibles para todos los usuarios.
Su problema es que nvm
no está en la ruta cuando usa sudo
.
Así que escribe
$ which nvm
y el resultado será algo así como
/home/abc/mynvm/nvm
Inténtalo de nuevo ahora con sudo
:
sudo /home/abc/mynvm/nvm use v0.10.23
Supongo que luego se encuentra con el problema de que el usuario root no puede encontrar la versión 0.10.13, pero veamos el siguiente mensaje de error ...
Tuve tu problema también Finalmente he trabajado alrededor de eso. Aquí está mi solución:
- Desinstalar nvm y nodejs. Aquí hay algunos enlaces útiles: Desinstalación de nvm . Si instaló nodejs utilizando apt-get, puede desinstalarlo con el comando
apt-get purge nodejs
. - Instale un nvm global. Vea esta página: github.com/xtuple/nvm . Como dice, "Standard nvm tiene dificultades conocidas para trabajar en entornos multiusuario o enraizados".
Después de reiniciar su terminal, puede ejecutar el comando sudo nvm ls
.
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3