Instalando Nodejs con NVM y YARN en MAC

Nodejs - NVM - YARN Como desarrollador fullstack es importante tener a disposición distintas versiones de nodejs y poder cambiar entre ellas sin recurrir a instalar todo un entorno cada vez. Igualmente no siempre queremos usar npm [npx], también tenemos yarn y queremos usar sus ventajas.

Para lo primero, de usar distintas versiones de node y cambiar cuando se requiera, podemos usar nvm. Un método adecuado para instalar nvm es seguir las instrucciones de los mismos creadores de nvm https://github.com/creationix/nvm.

Entonces, en nuestra terminal (usando hyper como yo :) sigamos las instrucciones:

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

Esto nos instala nvm y nos indica como configurar las variables de entorno en el perfil bash: (~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrc). Algunos o todos estos archivos los encontraremos en el Home de nuestro User en Mac.

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

Después de ajustar las variables de entorno en nuestro perfil bash, restauramos la terminal y pasamos a instalar node. Primero revisemos que si tenemos bien configurado nvm:

$ nvm --version

En mi caso tengo instalada la versión 0.34.0.

Ahora si instalamos la última versión de node:

$ nvm install node

Recuerda que nvm te permite instalar varias versiones de node y poder usarlas cuando requieras. Vamos a instalar la version 10.15.1:

$ nvm install 10.15.1

Veamos que tenemos instalado ahora:

$ nvm ls

       v10.15.1
->     v11.10.0
default -> node (-> v11.10.0)
node -> stable (-> v11.10.0) (default)
stable -> 11.10 (-> v11.10.0) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/dubnium (-> v10.15.1)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.16.0 (-> N/A)
lts/carbon -> v8.15.0 (-> N/A)
lts/dubnium -> v10.15.1

Tenemos dos versiones de node y por defecto la v.11.10.0.

$ node --version

v11.10.0
$ npm --version

6.7.0

Si queremos usar una versión en particular pues simplemente con nvm:

$ nvm use v10.15.1

ó la activamos por defecto:

$ nvm alias default v10.15.1

Ahora vamos a istalar yarn para tener nuestro arsenal listo y sin conflictos. Vamos a usar Homebrew para instalar yarn:

$ brew install yarn --ignore-dependencies

En las instrucciones de instalación de yarn se sugiere excluir la instalación de node si se usa nvm o similares, para que la versión de node usada con nvm ignore las dependencias y asi evitamos conflictos.

Igualmente si yarn no se encuentra en nuestro PATH, modificamos nuestro perfil para permitir que corra desde cualquier directorio y de forma global:

export PATH="/usr/local/opt/yarn:$PATH"
export PATH="$PATH:`yarn global bin`"

Reiniciamos la terminal y comprobamos la instalación de yarn:

$ yarn --version

1.13.0

TENIA MI ENTORNO NODE Y AHORA TENGO CONFLICTOS

Me anime a escribir este pequeño instructivo por que ya contaba con este entorno configurado y se me presento conflictos con nvm, npm y yarn en algunas terminales, ejemplo en VS Code:

nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v10.12.1 --silent` to unset it.

Básicamente tenia instalado nvm con Homebrew y este último reescribe el perfil del bash configurando esta línea:

source $(brew --prefix nvm)/nvm.sh

No basta con eliminar la línea, eso afecta a nvm con Homebrew. Lo que se debe hacer para ajustar todo de forma correcta es desinstalar el entorno node y volviendo a configurar según lo explicado arriba.

DESINSTALANDO EL ENTORNO NODE

para ir limpiando todo adecuadamente vamos a desinstalar las versiones de node que tenemos con nvm anterior:

$ nvm ls
       4.9.1
       5.12.0
       6.16.0
       7.9.0
       8.8.1
       8.15.0
       9.11.2
->     v10.12.1
.
.
.
$ nvm uninstall 4.9.1
$ nvm uninstall 5.12.0
$ nvm uninstall 6.16.0

y asi para todas las versiones con que contemos.

También podriamos usar:

$ rm -rf "$NVM_DIR"

Y con esto eliminamos todo, pero… recuerden que tenia instalado nvm con homebrew.

Eliminemos nvm:

$ brew uninstall nvm

Quitaremos del perfil bash:

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

Ahora desinstalar yarn:

$ brew uninstall yarn

Reiniciamos la terminal y listos!.

Es posible que tengamos basura de estas instalaciones u otros intentos de instalar node en nuestro sistema. Vamos a cerciorarnos manualmente de limpiar lo mejor posible.

Note que algunos de los directorios nombrados a continuación dependerán del método de instalación que se haya tenido:

  • Borrar node y/o node_modules de /usr/local/lib
  • Borrar node y/o node_modules de /usr/local/include
  • Borrar node, node-debug, y node-gyp de /usr/local/bin
  • Borrar .npm del directorio home
  • Borrar .node-gyp del directorio home
  • Borrar .node_repl_history del directorio home
  • Borrar node* de /usr/local/share/man/man1/
  • Borrar npm* de /usr/local/share/man/man1/
  • Borrar node.d de /usr/local/lib/dtrace/
  • Borrar node de /opt/local/bin/
  • Borrar node de /opt/local/include/
  • Borrar node_modules de /opt/local/lib/
  • Borrar node de /usr/local/share/doc/
  • Borrar node.stp de /usr/local/share/systemtap/tapset/

Recuerde que para borrar puede usar el comando rm:

# borrar archivo
$ rm nombre.archivo

# borrar directorio
$ rm -rf nombreDirectorio

# cuando se requiera permisos de root
$ sudo rm archivo

Este proceso me permitio limpiar debidamente mi entorno node y posteriormente hacer una instalación limpia y bien configurada con el proceso mencionado arriba.