¿Un file de puntos que establecerá la versión de nodo pnetworkingeterminada en un proyecto usando nvm?

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.

http://direnv.net/

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:

  1. Puede especificar la versión del nodo solo en el package.json , sin requerir un file .nvmrc
  2. También puede especificar la versión del nodo directamente en .envrc , nuevamente sin un file .nvmrc
  3. No agrego 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 ).