¿hay un entorno virtual para node.js?

133

He buscado en la página de módulos wiki, pero no puedo encontrar nada similar a virtualenv (python) o rvm.

¿Alguien aquí separa node.js en su propio entorno? Realmente no me gusta instalar npm en todo el sistema.

Frangossauro
fuente

Respuestas:

44

Si el problema principal es tener paquetes npm en todo el sistema, entonces tal vez considere usar el genial comando 'bundle' con npm. Esto está más cerca de congelar gemas o usar bundler en rieles, en lugar de rvm.

Es super fácil. Simplemente cree un archivo package.json:

{ "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}}

y luego ejecuta:

npm bundle vendor

o si su versión npm es> = 1.0 ejecutar:

npm install

para congelar en el directorio de proveedores. y luego usa:

require.paths.unshift('./vendor');
bxjx
fuente
1
@andho No lo he probado yo mismo, pero entiendo que las versiones recientes de NPM simplemente se usan npm installpara esto.
Marnen Laibow-Koser
13
Probado y confirmado ahora. npm installreemplazado a npm bundlepartir de NPM 1.0, creo.
Marnen Laibow-Koser
184

nodeenv : entorno virtual para node.js (Analog virtualenv )

shorrty
fuente
Esto se veía genial al principio, pero no pude hacer la instalación de npm con nodeenv al mismo tiempo que node.js está compilado (en osx Lion). Probablemente podría haber usado nvm install e instalar npm por separado para cada nodoenv ... cuando pensé en probarlo, ya tenía varias versiones de nodo ya hechas con otros medios.
Mikael Lepistö
2
Se puede utilizar para instalar dentro de un entorno virtual Python existente, de modo que el node.jsentorno se active junto con el entorno Python. Ver nodeenv -p.
naitsirhc
3
nodeenv (en realidad virtualenv + nodeenv) también es apto para usuarios de concha de pez ya que nave y otros no admiten otras shells que bash y zsh.
akarca
1
¿También hay un virtualenv-wrapper equivalente para él?
vmonteco
25

También hay algunos sistemas de gestión de versiones de Nodo que pueden ayudar.

Echa un vistazo a Nave https://github.com/isaacs/nave

NVM también podría usarse https://github.com/creationix/nvm

También hay uno llamado n https://github.com/visionmedia/n

Epeli
fuente
1
Nvm funciona muy bien si solo desea tener varias versiones de node.js y npm instaladas al mismo tiempo. Por lo demás, me pareció suficiente instalar los módulos necesarios en el directorio del proyecto con npm.
Mikael Lepistö
2
Si está mirando nvmo ndesea cambiar automáticamente cuando cambia de directorio, consulte avn: github.com/wbyoung/avn
wbyoung
1
Por lo que veo, n no es un entorno virtual. Todavía comparte todas las bibliotecas instaladas globalmente, pero npm.
Yannic Hamann el
7

La respuesta de bxjx es conceptualmente precisa. Sin embargo, tenga en cuenta que el comando de paquete ya no toma un directorio. Es siempre cae por paquetes en la node_modulescarpeta, por lo que la NGP sabe dónde encontrarlos más tarde (y puede evitar dependencias de doble instalación).

Cualquier solución probablemente implicará instalar npm y nave "en todo el sistema" (es decir, en su PATH, que podría estar en ~algún lugar), pero luego solo instalar sus dependencias específicas en el entorno virtual.

Respondí más a fondo sobre el tema de github .

tl; dr: El caso de uso es válido y útil, y aunque está principalmente allí, no está tan bien servido como podría estarlo. Debemos asegurarnos de pensarlo bien y hacerlo bien.

isaacs
fuente
El problema de GitHub parece que ya no existe. ¿Hay un enlace actualizado?
Drazisil
4

No siempre necesita instalar dependencias globalmente. Por lo general, se recomienda porque luego puede usar los comandos que proporciona un paquete npm, pero si lo instala localmente (en el node_modulesdirectorio), también puede usar estos comandos, solo terminan en el node_modules/.bin/directorio, por lo que tendrá que escribir node_modules/.bin/<command>, lo cual es molesto, pero por supuesto puede agregar esta ruta a su PATHvariable de entorno:

export PATH=node_modules/.bin:$PATH

¡Entonces puedes escribir <command>y funciona!

En realidad, hay un comando npm que devuelve una ruta absoluta al .bindirectorio:

$ npm bin
/path/to/node_modules/.bin

Este comando también funciona cuando está en un subdirectorio del proyecto, devolverá el primer node_modules/.bindirectorio que encuentre en sus directorios principales.

Puede agregar este alias en su .bashrcpara agregar automáticamente el .bin/directorio a su PATH:

alias nodebin='export PATH=$(npm bin):$PATH'

Entonces, cuando está en un directorio de un proyecto que tiene un node_modules/directorio en la raíz, puede escribir nodebiny luego puede usar todos los comandos que están en el .bin/directorio.

gitaarik
fuente