A situação seria:
Desenvolvo 2 projetos no meu ambiente de desenvolvimento Node.js., P1 e P2.
O P1 exigiu o desenvolvimento de dois módulos simples, mod1 e mod2, armazenados em P1/lib
. Cada um destes módulos resolve e encontra suas dependências externas P1/node_modules
. As dependências necessárias para P1 foram instaladas nesta pasta via npm.
Agora, imagem que queremos reutilizar mod1 no outro projeto P2, aqui estão minhas dúvidas. Eu poderia...
Basta copiar mod1 para
P2/lib
. Replicação, então nem considero essa opção.De P2, mod1 referência de P1:
require($PROJECTS_DIR + '/P1/lib/mod1')
. Não é uma boa opção, desta forma P2 dependeria de P1.Coloque mod1 em um diretório de nível superior ou use NODE_PATH, para que P1 e P2 possam resolvê-lo apenas doint
require('mod1')
. No entanto, ao implantar, também devo implantar esse diretório de nível superior que parece um pouco sujo.Gostaria de tratar o mod1 como um módulo npm, para que ele possa ser facilmente instalado em qualquer projeto ou ambiente. No entanto, nesse caso em particular, não posso publicar o módulo no npm, pois é muito específico para o projeto. Eu poderia criar um repositório npm privado e colocar o mod1 dentro. O essencial disso seria configurá-lo para ser acessado também a partir do ambiente de produção. Vale a pena?
Que tal juntar tudo isso
node_modules
? (dependências externas e minhas próprias bibliotecas). Isso seria ótimo, já que os módulos podem ser apenas necessários como `require ('module'). Mas também parece bastante sujo.Não tenho certeza de como
npm link
funcionaria ao implantar. Ele cria um link simbólico, que não é seguido ao confirmar o código via Git ou SVN. Se eu executarnpm install
em produção, ele também instalará o módulo vinculado?
Nenhuma das opções acima me satisfaz. Não sei se uma delas é adequada ou vocês têm outras sugestões, mas existem formas preferidas de estruturar bibliotecas particulares para que possam ser facilmente reutilizadas em outros projetos?
npm link
também no ambiente de produção? Ou está implícito nonpm install
.Qualquer maneira de especificá-lo no package.json?npm link
no desenvolvimento.