Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Por qué usar nvm para configurar un entorno de desarrollo y ejecución Node.js en Linux Debian

Imago voragine.net

TLDR; En Linux Debian, no se pueden instalar paquetes con npm globalmente en el sistema (npm install -g) sin usar sudo. Es una medida de seguridad necesaria que puede provocar problemas de permisos para usuarios sin permisos sudo cuando algún paquete se instala globalmente usando sudo, o que implica tener que instalar cada paquete como dependencia de cada repositorio. Esto puede tener sentido con dependencias del proyecto que se está desarrollando, pero no tanto con paquetes del entorno de desarrollo que se usan en todos los proyectos (linters, revisores de código, typescript…). Esto se soluciona usando nvm que permite crear un entorno Node.js específico para cada usuario del sistema, de manera que los paquetes instalados globalmente son globales para el usuario que los instala. nvm se puede instalar sin usar sudo, así que un usuario no necesita contactar al administrador del sistema.

Instalar Node Version Manager (nvm)

En el repositorio oficial de nvm se puede descargar un script de bash que descarga nvm y añade la configuración necesaria al archivo de perfil del usuario (~/.bashrc, ~/.bash_profile, ~/.zshrc, o ~/.profile). Es recomendable consultar el repositorio para instalar la última versión. En el momento de escribir este tutorial era la 0.40.3:

$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
=> Downloading nvm from git to '/home/skotperez/.nvm'
=> Clonando en '/home/skotperez/.nvm'...
remote: Enumerating objects: 383, done.
remote: Counting objects: 100% (383/383), done.
remote: Compressing objects: 100% (326/326), done.
remote: Total 383 (delta 43), reused 180 (delta 29), pack-reused 0 (from 0)
Recibiendo objetos: 100% (383/383), 391.78 KiB | 2.67 MiB/s, listo.
Resolviendo deltas: 100% (43/43), listo.
* (HEAD desacoplado en FETCH_HEAD)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /home/skotperez/.zshrc
=> Appending bash_completion source string to /home/skotperez/.zshrc
=> You currently have modules installed globally with `npm`. These will no
=> longer be linked to the active version of Node when you install a new node
=> with `nvm`; and they may (depending on how you construct your `$PATH`)
=> override the binaries of modules installed with `nvm`:

/usr/local/lib
├── @vue/cli@5.0.8
└── npm-check-updates@16.13.2
=> If you wish to uninstall them at a later point (or re-install them under your
=> `nvm` node installs), you can remove them from the system Node as follows:

     $ nvm use system
     $ npm uninstall -g a_module

=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Para que nvm esté disponible hay que cerrar terminal y abrir una nueva.

Instalar Node Package Manager (npm) usando nvm

Antes de instalar node con nvm puede ser que node esté ya instalada en el sistema de manera global. Para comprobarlo:

$ node -v
v20.19.5
$ npm -v
9.2.0

En Debian Trixie, en el momento de escribir este tutorial, la última versión disponible de node es la 20.19.5, y de npm la 9.2.0.

Para instalar la última versión de node usando nvm:

$ nvm install node
Downloading and installing node v25.0.0...
Downloading https://nodejs.org/dist/v25.0.0/node-v25.0.0-linux-x64.tar.xz...
############################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v25.0.0 (npm v11.6.2)
Creating default alias: default -> node (-> v25.0.0)

La primera versión de node instalada con nvm se configura como la versión a usar por omisión.

Si ahora hacemos la comprobación de la versión de node y de npm disponibles por omisión para este usuario:

$ node -v
v25.0.0
$ npm -v
11.6.2

Para otro usuario que no haya instalado nvm, la versiones disponibles seguirán siendo las instaladas desde los repositorios de Debian.

Para instalar una versión específicamente:

$ nvm install 22.21.0
Downloading and installing node v22.21.0...
Downloading https://nodejs.org/dist/v22.21.0/node-v22.21.0-linux-x64.tar.xz...
############################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v22.21.0 (npm v10.9.4)

Al instalar una nueva versión, ésta se activa automáticamente en esa terminal. Sin embargo, la versión por omisión sigue siendo la primera que se instaló. Múltiples versiones de node pueden convivir para un usuario, que podrá elegir la que quiere usar en cada caso. Para ver todas las versiones instaladas:

$ nvm ls-remote

Para seleccionar una versión de node diferente en un momento dado:

$ nvm use 22.21.0

Instalar paquetes en un entorno node instalado con nvm

Al instalar un paquete de manera global en un entorno node instalado con nvm, el paquete estará globalmente disponible para el usuario:

$ npm install -g @google/gemini-cli

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks