Instalando Node con NVM y Yarn en Mac
Como desarrollador fullstack es importante tener a disposición distintas versiones de node 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 mac (o 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 alguna versión en particular de las ya instaladas pues simplemente con nvm:
$ nvm use v10.15.1
ó podemos activar alguna versión 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 así 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
Listo!…
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. Veamos una lista de las versiones node instaladas:
$ 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
⋮
Ahora desinstalemos:
$ 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 podríamos usar:
$ rm -rf "$NVM_DIR"
y con esto eliminamos todo, pero… recuerden que tenia instalado nvm con homebrew.
Ahora 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
Finalmente 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 usado:
- 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 nombre.archivo
$ sudo rm -rf nombreDirectorio
Este proceso me permitió limpiar debidamente mi entorno node y posteriormente hacer una instalación limpia y bien configurada con el proceso mencionado arriba.