existe um ambiente virtual para o node.js?

133

Eu procurei na página de módulos wiki, mas não consigo encontrar nada parecido com virtualenv (python) ou rvm.

Alguém aqui separa o node.js em seu próprio ambiente? Eu realmente não gosto de instalar o npm em todo o sistema.

Frangossauro
fonte

Respostas:

44

Se o problema principal é ter pacotes npm em todo o sistema, talvez considere usar o comando 'bundle' muito interessante com o npm. Isso está mais próximo do congelamento de gemas ou do uso de bundler nos trilhos, em vez do rvm.

É super fácil. Basta criar um arquivo package.json:

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

e então execute:

npm bundle vendor

ou se sua versão do npm for> = 1.0, execute:

npm install

para congelar no diretório do fornecedor. e então use:

require.paths.unshift('./vendor');
bxjx
fonte
1
@andho Ainda não testei isso, mas entendo que versões recentes do NPM simplesmente usam npm installisso.
Marnen Laibow-Koser
13
Testado e confirmado agora. npm installsubstituído a npm bundlepartir do NPM 1.0, acredito.
Marnen Laibow-Koser
184

nodeenv - ambiente virtual para node.js (analógico virtualenv )

barulhento
fonte
Isso parecia ótimo no início, mas eu não consegui concluir a instalação do npm com o nodeenv ao mesmo tempo com o node.js é compilado (no osx Lion). Provavelmente eu poderia ter usado o nvm install e o npm separadamente para cada nodeenv ... no momento em que pensei em experimentá-lo, já havia várias versões de nós feitas com outros meios.
Mikael Lepistö 13/03/12
2
Pode ser usado para instalar em um ambiente virtual Python existente, para que o node.jsambiente seja ativado junto com o ambiente Python. Veja nodeenv -p.
Naitsirhc
3
O nodeenv (na verdade virtualenv + nodeenv) também é adequado para usuários de cascas de peixes, já que a nave e outros não suportam outros shells além do bash e zsh.
Akarca
1
Existe também um invólucro virtualenv-wrapper para isso?
vmonteco 28/02
25

Existem também alguns sistemas de gerenciamento de versão do Node que podem ajudar.

Confira o Nave https://github.com/isaacs/nave

O NVM também pode ser usado https://github.com/creationix/nvm

Há também um chamado n https://github.com/visionmedia/n

Epeli
fonte
1
O Nvm funciona muito bem se você gostaria de ter várias versões do node.js e do npm instaladas ao mesmo tempo. De resto, achei suficiente ter módulos necessários sendo instalados no diretório do projeto com o npm.
Mikael Lepistö 13/03/12
2
Se você está olhando nvmou ne quer comutação automática quando você alterar diretórios, olhada avn: github.com/wbyoung/avn
wbyoung
1
Tanto quanto vejo n não é um ambiente virtual. Ele ainda compartilha todas as bibliotecas instaladas globalmente, exceto npm.
Yannic Hamann
7

A resposta da bxjx é conceitualmente precisa. No entanto, observe que o comando bundle não ocupa mais um diretório. Ele semprenode_modules coloca pacotes na pasta, para que o npm saiba onde encontrá-los mais tarde (e evite dependências de instalação dupla).

Qualquer solução provavelmente envolverá a instalação do npm e da nave "em todo o sistema" (isto é, no seu PATH, que poderia estar em ~algum lugar), mas somente na instalação de suas dependências específicas no ambiente virtual.

Eu respondi mais detalhadamente sobre a questão do github .

tl; dr: O caso de uso é válido e útil e, embora esteja principalmente lá, não é tão bem servido quanto poderia ser. Devemos ter certeza de refletir e fazer o que é certo.

isaacs
fonte
O problema do GitHub parece não existir mais. Existe um link atualizado?
Drazisil 22/03
4

Você nem sempre precisa instalar dependências globalmente. Normalmente, é recomendado porque você pode usar os comandos que os pacotes npm fornecem, mas se você instalá-lo localmente (no node_modulesdiretório), também poderá usar esses comandos, eles apenas serão encerrados no node_modules/.bin/diretório, portanto, será necessário digitar node_modules/.bin/<command>: o que é irritante, mas é claro que você pode adicionar esse caminho à sua PATHvariável de ambiente:

export PATH=node_modules/.bin:$PATH

Então você pode apenas digitar <command>e funciona!

Na verdade, existe um comando npm que retorna um caminho absoluto para o .bindiretório:

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

Este comando também funciona quando você está em um subdiretório do projeto; ele retornará o primeiro node_modules/.bindiretório encontrado nos diretórios pai.

Você pode adicionar esse alias no seu .bashrcpara adicionar automaticamente o .bin/diretório ao seu PATH:

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

Portanto, quando você estiver no diretório de um projeto que tenha um node_modules/diretório na raiz, você poderá digitar nodebine usar todos os comandos que estão no .bin/diretório!

gitaarik
fonte