Eu amo o Bundler , é ótimo no gerenciamento de dependências. Eu amo o npm , instalar pacotes de nó é fácil! Tenho um aplicativo nodejs e adoraria poder especificar as dependências de meus aplicativos e instalá-los / atualizá-los facilmente onde quer que eu implante meu aplicativo. Esta não é uma biblioteca que estou lançando, é um aplicativo da web completo.
Estou ciente do npm bundle
comando, mas ele simplesmente parece substituir o diretório onde os pacotes são instalados.
Estou acostumado a usar bundler desta maneira:
# Gemfile
gem "rails", "3.0.3"
Instala o rails v3.0.3 e quaisquer outras joias necessárias na máquina host apenas se ainda não existir
> bundle install
Como posso conseguir algo semelhante com o npm?
javascript
dependencies
node.js
bundler
npm
Daniel Beardsley
fonte
fonte
Respostas:
A partir do npm 1.0 (que agora é o que você obtém por padrão se seguir as etapas no arquivo README), "pacote" não é mais uma coisa segregada - é apenas "como funciona".
Assim:
package.json
arquivo na raiz do seu projetoListe seus departamentos nesse arquivo
npm install
Como você está chamando isso sem args e não no modo global, ele apenas instalará todos os seus dep's localmente.require("express")
e seja feliz.fonte
your_app/node_modules
diretório local para um link simbólico fora do diretório do seu aplicativo. Você não quer ter que baixar, construir e instalar cada dependência sempre que implantar.my-project
em./node_modules/my-project/node_modules
. Não tenho certeza se existe uma maneira conveniente de fazer com que ele instale todas as dependências no./node_modules
Anyone?Editar: Isso se aplica apenas às versões npm <1.0
Foi muito difícil descobrir isso, mas a NPM torna isso possível .
Você precisa de três componentes
deps/
)package.json
arquivo no diretório acima que lista as dependênciasindex.js
arquivo no diretório acima que requer suas dependênciasExemplo
Imagine que expresso é sua única dependência
deps / package.json
nota: aumente o número da versão cada vez que modificar as dependências
deps / index.js
Agora você deve conseguir instalar suas dependências usando o npm. Você pode até tornar isso parte do seu processo de implantação
Então, dentro do código do seu aplicativo, você pode obter acesso à sua versão específica do Express como este:
fonte
require('express')
in deps / index.js não importaria apenas a versão Express mais recente, e não necessariamente a que instalamos? Eu sou um novato nodeJS, por favor, tenha paciência comigo.npm install
, ele adiciona links simbólicos dentro do diretório do seu pacote instalado para as versões corretas dos pacotes dependentes. Quando o seu pacote de dependências é necessário, orequire('express')
verifica o diretório local primeiro e encontra o link simbólico para a versão correta do express.Você deve ler esses dois artigos do blog de Isaacs (autor npm). Eu acho que eles são muito bons, e acredito que dizem a você como atingir seu objetivo:
Acredito que o link nº 1 (ponto nº 11) explica isso:
fonte
npm bundle
é usado para coletar todas as suas dependências em um diretório específico diferente do padrão. Provavelmente irei encontrar minha própria solução com desempenho semelhante abundle install
(bundler
para ruby)npm
versão 1.0+,npm bundle
foi removida. Em vez disso, apenas use onpm install
comando sem nome de pacote, ele lerá o package.json e puxará os pacotes necessários.A partir da versão 1.1.2 do Npm, há um novo comando
npm shrinkwrap
que cria umnpm-shrinkwrapped.json
arquivo, análogo aoGemfile.lock
. É importante fazer um, para evitar o apodrecimento do software (veja a lógica de Bundler ). Particularmente porque o Nodejs tem uma comunidade tão dinâmica.Embora
bundle install
crie umGemfile.lock
automaticamente,npm install
não criaránpm-shrinkwrapped.json
(mas o usará quando existir). Portanto, você precisa se lembrar de usarnpm shrinkwrap
.Leia um guia completo em http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
fonte
Parece-me que a solução mais simples é usar um
package.json
arquivo com oprivate
sinalizador (adicionado ao npm no mês passado) definido comotrue
. Dessa forma, você pode executarnpm install
ounpm bundle
obter as dependências do seu projeto, mas evita que alguém publique acidentalmente seu projeto não público.Aqui está um exemplo
package.json
:A execução
npm install
será instaladaexpress
no sistema local se ainda não existir; a execuçãonpm publish
dá um erro por causa do"private": true
.Você e sua equipe podem usar a tag de versão internamente para rastrear alterações de dependência ao longo do tempo - cada vez que você alterar uma dependência, altere a versão. Para ver qual versão você instalou, use
npm ls installed
.fonte
true
e que só está funcionando porque strings são valores verdadeiros (ou seja,!!"false" === true
).Publique seu aplicativo
npm
também e liste suas dependências no arquivo package.json.Quando alguém usar
npm
para instalar seu pacote,npm
cuidará de resolver suas dependências.Especificação de pacotes: http://wiki.commonjs.org/wiki/Packages/1.0
fonte
npm
para instalar antes de instalar seu aplicativo. Não acho que haja qualquer outrogem
equivalente para node.js.