En ruby cuando usa rbenv puede hacer un file .ruby-version
y ponerlo en el directory local. https://gist.github.com/fnichol/1912050 Estoy buscando algo similar a esto usando NVM ?
Pregunta:
¿Hay una propiedad para establecer en package.json o un file para crear que establecerá la versión pnetworkingeterminada del nodo de un proyecto?
Puede hacerlo con una combinación de NVM, files punto en el directory de su proyecto y una pequeña herramienta llamada direnv
que le permite cargar variables de entorno por directory.
Instale NVM y directamente, y luego cd
al directory en el que desea cambiar las versiones de Node.
Agregue un file llamado .nvmrc
en ese directory, que contenga solo el número de versión de la versión del Nodo al que desea cambiar automáticamente, por ejemplo ,:
6.2.2
A continuación, agregue un file de configuration de entorno llamado .envrc
a su directory, que contiene este script:
nvmrc=~/.nvm/nvm.sh if [ -e $nvmrc ]; then source $nvmrc nvm use fi PATH_add node_modules/.bin
Si ahora sale de este directory y luego vuelve a entrar, directamente se activará y se le pedirá que agregue el directory a su list blanca escribiendo " direnv allow .
en el prompt. Una vez incluida en la list blanca, la dirección ejecutará automáticamente esa secuencia de commands cada vez que ingrese a este directory, configurando su versión de Nodo al número de versión en .nvmrc
.
Como beneficio adicional, también agregará el directory node_modules
a su PATH, por lo que puede ejecutar binarys desde esos directorys sin anteponer la ruta node_modules
.
Así es como lo hago, generalmente similar a la respuesta de Ross Shannon, con algunas diferencias:
package.json
, sin requerir un file .nvmrc
.envrc
, nuevamente sin un file .nvmrc
node_modules/.bin
a la RUTA, pero si ese es su comportamiento preferido, simplemente agregue PATH_add node_modules/.bin
a la function use_nvm
. Para mí, era importante .nvmrc
selección de la versión del nodo de package.json
lugar de .nvmrc
porque no quería preocuparme por mantener dos files sincronizados (especialmente en un proyecto con múltiples queueboradores). Dicho esto, esta solución aún funciona con .nvmrc
.
Esta solución requiere direnv , nvm y opcionalmente (si desea poder seleccionar la versión del nodo de package.json) jq .
En el ~/.config/direnv/direnvrc
, agregue lo siguiente:
# To use: # 1) Node version specified in package.json, in .envrc add: # use nvm package.json # This requires that package.json contains something like # "engines": { # "node": ">=6.9.2" # }, # # 2) Node version specified in .envrc add: # use nvm 6.9.2 # # 3) Node version specified in .nvmrc, in .envrc add: # use nvm use_nvm() { local node_version=$1 if [[ $node_version = "package.json" ]]; then if has jq; then node_version=$(jq --raw-output .engines.node package.json | tr -d "<=> ") else echo "Parsing package.json for node version to use with direnv requires jq" fi fi nvm_sh=~/.nvm/nvm.sh if [[ -e $nvm_sh ]]; then source $nvm_sh nvm use $node_version fi }
En el directory de su proyecto, agregue un file .envrc
que llame use nvm
, por ejemplo:
use nvm package.json
Sin embargo, prefiero algo como lo siguiente para mi .envrc
:
if declare -Ff use_nvm >/dev/null; then use nvm package.json fi
para proyectos compartidos con .envrc
compartido para que los queueboradores que no tienen use nvm
definido no obtengan un error.
Ahora, cuando ingrese al directory de su proyecto, su versión de Nodo deseada se usará automáticamente (la primera vez, se le solicitará que .envrc
en la list blanca sus cambios en .envrc
con direnv allow
).
Ahora hay algo de soporte nativo para esto integrado en el stdlib de la direna. Está documentado en su wiki , pero la fuente es igual de fácil de leer, o escribe direnv stdlib
para encontrarla).
$ node -v v8.0.0 $ cat .node-version 4.3.2 $ cat .envrc use node $ export NODE_VERSIONS=~/.nvm/versions/node $ export NODE_VERSION_PREFIX=v $ direnv allow direnv: loading ~/.config/direnv/direnvrc direnv: loading .envrc direnv: using node direnv: Successfully loaded NodeJS v4.3.2 (via .node-version), from prefix (~/.nvm/versions/node/v4.3.2) direnv: export +CPATH +LD_LIBRARY_PATH +LIBRARY_PATH +PKG_CONFIG_PATH ~MANPATH ~PATH $ node -v v4.3.2 $ direnv deny direnv: error .envrc is blocked. Run `direnv allow` to approve its content. $ node -v v8.0.0
Si desea node_modules/.bin
en su ruta, solo agregue el layout node
línea a su .envrc
(la fuente también está en la salida direnv stdlib
).