Eu tenho um aplicativo que possui o conjunto usual de dependências em módulos de terceiros (por exemplo, 'express') especificado no arquivo package.json em dependências. Por exemplo
"express" : "3.1.1"
Gostaria de estruturar meu próprio código de forma modular e ter um conjunto de módulos locais (ou seja, no sistema de arquivos em que estou atualmente) instalados pelo pacote.json. Eu sei que posso instalar um módulo local executando:
npm install path/to/mymodule
No entanto, não sei como fazer isso acontecer através da estrutura de dependências package.json. Usar a --save
opção neste comando é simplesmente colocar "mymodule": "0.0.0"
no meu package.json (não faz referência à localização do caminho do arquivo). Se eu remover a versão instalada do node_modules e tentar reinstalar o package.json, ele falhará (porque procura "mymodule" no registro central e não parece localmente).
Tenho certeza de que é uma maneira de dizer ao "dependencies": {}
estrutura que quero que ela seja instalada a partir de um caminho do sistema de arquivos, mas não sei como.
Alguém mais teve este problema? Obrigado.
package.json
ao que temos emGemfile
s.Respostas:
npm install
agora suporta issoPara que isso funcione,
mymodule
deve ser configurado como um módulo própriopackage.json
. Consulte Criando módulos NodeJS .A partir do npm 2.0, as dependências locais são suportadas nativamente. Veja a resposta de danilopopeye a uma pergunta semelhante . Copiei a resposta dele aqui, já que esta pergunta é muito alta nos resultados de pesquisa na web.
sincronizando atualizações
Desde as
npm install
cópiasmymodule
paranode_modules
, alterações nomymodule
fonte 's não será automaticamente visto pelo projeto dependente.Há duas maneiras de atualizar o projeto dependente com
Atualize a versão
mymodule
e usenpm update
: Como você pode ver acima, apackage.json
entrada "dependências" não inclui um especificador de versão como você veria para dependências normais. Em vez disso, para dependências locais,npm update
apenas tenta garantir que a versão mais recente esteja instalada, conforme determinado pormymodule
'spackage.json
. Veja a resposta de chriskelly para esse problema específico .Reinstale usando
npm install
. Isso instalará o que estiver nomymodule
caminho de origem do mesmo, mesmo se for mais antigo ou se houver uma ramificação alternativa, o que for.fonte
"mymodule":"file:mymoduledir"
npm install --save ../my-local-repo
import { HelloWorld } from "my-test-lib";
, mas recebo o erro "Não consigo encontrar o módulo". Por favor, dê uma olhada em stackoverflow.com/questions/46818083/…import { HelloWorld } from "my-test-lib";
Consulte: Dependência local em package.json
Parece que a resposta é
npm link
: https://docs.npmjs.com/cli/linkfonte
symlink
como o projeto pai saberá reconstruir depois que a dependência terminar de construir?Não consegui encontrar uma maneira elegante no final, então criei um diretório chamado
local_modules
e adicionei esse bashscript ao package.json em scripts-> pré-instalaçãofonte
Depois de lutar muito com o
npm link
comando (solução sugerida para o desenvolvimento de módulos locais sem publicá-los em um registro ou manter uma cópia separada na pasta node_modules), criei um pequeno módulo npm para ajudar com esse problema.A correção requer duas etapas fáceis .
Primeiro:
Segundo, adicione isso ao seu
package.json
:Mais detalhes em https://www.npmjs.com/package/lib-manager . Espero que ajude alguém.
fonte
Se for aceitável simplesmente publicar seus módulos pré-instalados em node_modules junto com outros arquivos, você pode fazer o seguinte:
Você também pode armazenar seu módulo no git e informar ao seu package.json pai para instalar a dependência do git: https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies
fonte