Supondo que eu escrevi um módulo para o Node.js que gostaria de manter privado. Eu sei que posso (devo) adicionar a linha:
"private": "true"
ao package.json
arquivo e também sei que posso npm install
usar este módulo usando um caminho do sistema de arquivos ou um link para um repositório git, incluindo o GitHub.
Também sei que posso colocar um caminho do sistema de arquivos ou um link para um repositório git package.json
, para que a dependencies
parte possa parecer algo assim:
"dependencies": {
"myprivatemodule": "[email protected]:..."
}
O que eu quero agora não é vincular à versão mais recente, mas a uma versão específica. A única possibilidade que conheço é vincular a um commit específico usando seu ID. Mas isso é muito menos legível e é mais fácil de manter do que usar um número de versão como 0.3.1
.
Então, minha pergunta é: É possível especificar um número de versão assim e fazer com que o npm procure no repositório git o commit mais recente que inclua esta versão?
Caso contrário, como você resolve esse problema em seus projetos? Você mora com IDs de confirmação ou existe uma solução melhor para isso?
git tag -a "1.0.0"
e enviei por pushgit push --tags
, depois adicionei o#v1.0.0
no final dagit+ssh
dependência. Masnpm update
nada acontece.v
era necessário adicionar . Após o#
, o fragmento deve corresponder ao nome completo da tag (ou outro commit ) - no seu caso#1.0.0
,.npm i {owner}/{project}#{tag}
ou adicionar"{library}": "github:{owner}/{project}#{tag}"
ao package.json em vez de usar[email protected]
ougit://github.com
A resposta aceita não funcionou para mim. Aqui está o que estou fazendo para obter um pacote do github:
Ou adicionando-o manualmente no package.json:
fonte
"package": "git+https://github.com/username/package.git#commit"
#tag
que normalmente aponta para um número de versãogit tag -a v1.0.1 && git push --tag && git push
como Jonathan Lonowski também disse em um comentário.Se por versão você quer dizer uma tag ou um release, o github fornece links de download para eles. Por exemplo, se eu quiser instalar a versão de busca 0.3.2 (não está disponível no npm), adiciono ao meu
package.json
emdependencies
:A única desvantagem, quando comparada com a abordagem de hash de confirmação, é a garantia de que um hash não representa código alterado, enquanto uma tag pode ser substituída. Felizmente, isso raramente acontece.
Atualizar:
Atualmente, a abordagem que utilizo é a notação compacta de uma dependência atendida pelo GitHub:
Onde commit pode ser qualquer commit, como uma tag. No caso do GitHub, você pode até soltar a inicial,
github:
pois é o padrão.fonte
Meu comentário de exemplo para @qubyte acima foi cortado, então aqui está algo que é mais fácil de ler ...
O método @surjikal descrito acima funciona para confirmações de ramificação, mas não para uma confirmação de árvore que eu estava tentando incluir.
O modo de arquivamento também funciona para confirmações. Por exemplo, busque @ a2fbf83
npm :
fio :
formato :
Aqui está o commit da árvore que exigia o
/archive/
modo:para o commit vuex relacionado
fonte
Este comando instala o pacote npm a
username/package
partir do commit específico do git:Aqui
3d0a21cc
estão os 8 primeiros caracteres do hash de confirmação.fonte
Descrevo aqui um problema que enfrentei ao executar
npm install
- o pacote não aparecenode_modules
.O problema era que o
name
valorpackage.json
do pacote instalado era diferente do nome do pacote importado (chavepackage.json
do meu projeto).Portanto, se seu nome do projeto instalado é
some-package
(valor de nome em seupackage.json
), em seguida,package.json
de sua gravação do projeto:"some-package": "owner/some-repo#tag"
.fonte
name
requisito não é mencionado com frequência na rede. (não que eu possa incorrer nisso, pelo menos).npm install --save git+https://<remote-github-repo-url>
é uma maneira bastante segura de não atingir esse problema novamente no futuro.Eu precisava executar duas versões do tfjs-core e descobri que ambas precisavam ser construídas depois de instaladas.
package.json:
Então:
E, finalmente, para usar as bibliotecas:
Isso funcionou muito bem, mas é certamente #hoodrat
fonte
Se você estiver fazendo isso com mais de um módulo e quiser ter mais controle sobre as versões, deverá ter seu próprio registro npm privado.
Dessa forma, o npm pode publicar seus módulos em seu registro npm privado e usar as entradas package.json da mesma maneira que faria nos módulos públicos.
https://docs.npmjs.com/files/package.json#dependencies
fonte