existe-t-il un environnement virtuel pour node.js?

134

J'ai cherché dans la page des modules wiki, mais je ne trouve rien de similaire à virtualenv (python) ou rvm.

Quelqu'un ici sépare node.js dans son propre env? Je n'aime vraiment pas installer npm à l'échelle du système.

Frangossauro
la source

Réponses:

44

Si avoir des packages npm à l'échelle du système est votre principal problème, envisagez peut-être d'utiliser la commande très cool 'bundle' avec npm. C'est plus proche de geler des gemmes ou d'utiliser un bundler dans des rails, plutôt que rvm.

C'est super facile. Créez simplement un fichier package.json:

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

puis exécutez:

npm bundle vendor

ou si votre version npm est> = 1.0, exécutez:

npm install

pour se figer dans le répertoire du fournisseur. puis utilisez:

require.paths.unshift('./vendor');
bxjx
la source
1
@andho Je n'ai pas testé cela moi-même, mais je comprends que les versions récentes de NPM l'utilisent simplement npm installpour cela.
Marnen Laibow-Koser
13
Testé et confirmé maintenant. npm installremplacé à npm bundlepartir de NPM 1.0, je crois.
Marnen Laibow-Koser
184

nodeenv - environnement virtuel pour node.js (Analog virtualenv )

shorrty
la source
Cela avait l'air super au début, mais je n'ai pas pu faire l'installation de npm avec nodeenv en même temps que node.js est compilé (sur osx Lion). J'aurais probablement pu utiliser nvm install et installer npm séparément pour chaque nodeenv ... au moment où j'ai pensé à l'essayer, j'avais déjà plusieurs versions de nœuds avec d'autres moyens.
Mikael Lepistö
2
Peut être utilisé pour installer dans un environnement virtuel Python existant, de sorte que l' node.jsenvironnement soit activé avec l'environnement Python. Voir nodeenv -p.
naitsirhc
3
nodeenv (en fait virtualenv + nodeenv) convient également aux utilisateurs de coquillages de poisson puisque nave et d'autres ne supportent pas d'autres shells que bash et zsh.
akarca
1
Existe-t-il également un équivalent virtualenv-wrapper pour cela?
vmonteco
25

Il existe également des systèmes de gestion de version de Node qui peuvent vous aider.

Découvrez Nave https://github.com/isaacs/nave

NVM pourrait également être utilisé https://github.com/creationix/nvm

Il y en a aussi un appelé n https://github.com/visionmedia/n

Epeli
la source
1
Nvm fonctionne très bien si vous souhaitez simplement avoir différentes versions de node.js et npm installées en même temps. Pour le reste, je l'ai trouvé suffisant pour que les modules requis soient installés dans le répertoire du projet avec npm.
Mikael Lepistö
2
Si vous regardez nvmou net que vous voulez une commutation automatique lorsque vous changez de répertoire, regardez avn: github.com/wbyoung/avn
wbyoung
1
Autant que je vois, n n'est pas un environnement virtuel. Il partage toujours toutes les bibliothèques installées dans le monde sauf npm.
Yannic Hamann
7

La réponse de bxjx est conceptuellement exacte. Cependant, veuillez noter que la commande bundle ne prend plus de répertoire. Il dépose toujours les packages dans le node_modulesdossier, afin que npm sache où les trouver plus tard (et peut éviter la double installation des dépendances).

Toute solution impliquera probablement l'installation de npm et nave "à l'échelle du système" (c'est-à-dire dans votre PATH, qui pourrait être ~quelque part), mais ensuite seulement d'installer vos dépendances spécifiques dans l'environnement virtuel.

J'ai répondu plus en détail sur le problème de github .

tl; dr: Le cas d'utilisation est valide et utile, et bien qu'il soit principalement là, il n'est pas aussi bien servi qu'il pourrait l'être. Nous devons nous assurer d'y réfléchir et de le faire correctement.

Isaacs
la source
Le problème GitHub semble ne plus exister. Y a-t-il un lien mis à jour?
Drazisil
4

Vous n'avez pas toujours besoin d'installer les dépendances globalement. Habituellement, c'est recommandé car vous pouvez utiliser les commandes fournies par un paquet npm, mais si vous l'installez localement (dans le node_modules) répertoire, vous pouvez également utiliser ces commandes, elles ne se retrouvent que dans le node_modules/.bin/répertoire, vous devrez donc taper node_modules/.bin/<command>, ce qui est ennuyeux, mais vous pouvez bien sûr ajouter ce chemin à votre PATHvariable d'environnement:

export PATH=node_modules/.bin:$PATH

Ensuite, vous pouvez simplement taper <command>et cela fonctionne!

Il existe en fait une commande npm qui renvoie un chemin absolu vers le .binrépertoire:

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

Cette commande fonctionne également lorsque vous êtes dans un sous-répertoire du projet, elle retournera le premier node_modules/.binrépertoire qu'il trouve dans ses répertoires parents.

Vous pouvez ajouter cet alias dans votre .bashrcpour ajouter automatiquement le .bin/répertoire à votre PATH:

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

Ainsi, lorsque vous êtes dans un répertoire d'un projet qui a un node_modules/répertoire à la racine, vous pouvez taper nodebinet ensuite vous pouvez utiliser toutes les commandes qui se trouvent dans le .bin/répertoire!

gitaarik
la source