O npm instala repositórios particulares do github por dependência em package.json

210

Estou tentando instalar o repositório particular do github pelo npm, que inclui outros repositórios particulares do github como dependência.

Tentei de várias maneiras e postagens, mas nenhuma está funcionando. Aqui está o que estou fazendo:

npm install git+https://github.com/myusername/mygitrepository.git

no package.json é como:

"dependencies": {
    "repository1name": "git+https://github.com/myusername/repository1.git",
    "repository2name": "git+https://github.com/myusername/repository2.git"
}

Qual é o caminho certo para fazer isso?

vashishatashu
fonte
4
git + https: // <token-from-github>: [email protected]/ <user> / <GitRepo> .git Ele suporta autenticação e funciona bem em todos os casos.
vashishatashu

Respostas:

147

Tente o seguinte:

"dependencies" : {
  "name1" : "git://github.com/user/project.git#commit-ish",
  "name2" : "git://github.com/user/project.git#commit-ish"
}

Você também pode tentar isso, em que visionmedia / express é name / repo:

"dependencies" : {
   "express" : "visionmedia/express"
}

Ou (se o módulo do pacote npm existir):

"dependencies" : {
  "name": "*"
}

Extraído dos documentos do NPM

leko
fonte
1
npm ERR! Falha ao resolver o git HEAD ( github.com/user/reponame.git ) fatal: argumento ambíguo 'commit-ish': revisão desconhecida ou caminho que não está na árvore de trabalho.
precisa saber é o seguinte
Não funciona o #xxxx não é necessário como se não fosse considerado mestre e todo o meu trabalho é mestre. Alguma outra ideia?
precisa saber é o seguinte
Mesmo resultado se você remover o cabeçalho (# commit-ish)?
leko
Qual o nome do seu repositório?
Leo
28
@vashishatashu, relativamente fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Bastante óbvio que commit-ishé apenas uma palavra de exemplo que você deve substituir por uma shaconfirmação específica de que você precisa. (ou remover essa #commit-ishem tudo se você precisa da última cometer em seu branch master)
meandre
91

O seguinte funcionou bem em todos os cenários que eu precisava:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:[email protected]/<user>/<GitRepo>.git"
}
vashishatashu
fonte
1
Você tem um link de referência para esta solução?
31715 Ian
3
@Ian: Eu li em algum lugar, mas não tenho link de referência. Estou usando-o na produção há mais de um ano sem nenhum problema. Você pode obter o token oauth no Github como: Configurações -> Aplicativos -> Token de acesso pessoal -> Gerar novo token. Esse token pode ter privilégios de leitura / gravação ou ambos, conforme o seu caso de uso.
vashishatashu
6
@lan: para bitbucket, você pode usar a seguinte sintaxe: git clone https: // <bitbucket-team-token>: [email protected]/ <team> / <BitRepo> <bitbucket-team-token> can ser obtida a partir de: Team -> Gerenciar a equipe -> API Key
vashishatashu
@vashishatashu, obrigado por uma ótima idéia. No entanto, eu recebo "fatal: blahblah não encontrado" ao tentar isso, mesmo que eu tenha concedido acesso ao usuário em questão ao repositório. Alguma ideia?
Per Lundberg
2
Aqui está um bom artigo sobre esta técnica: rzrsharp.net/2013/07/02/…
cyberwombat
75

Para aqueles que vieram aqui para diretórios públicos, nos documentos do npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

URLs Git como dependências

Os URLs Git podem ter a forma:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

O commit-ish pode ser qualquer tag, sha ou branch que possa ser fornecido como um argumento para o git checkout. O padrão é mestre.

mummybot
fonte
1
O que significa "para diretórios públicos"?
Dan Dascalescu
1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. Referência do npmjs docs
Aleksandar
O que o protocolo git+https://significa? Usar gitprotocolo para clonagem e obter novas alterações enquanto pressiona https?
tonix
60

A resposta aceita funciona, mas não gosto muito da ideia de colar tokens seguros no diretório package.json

Eu o encontrei em outro lugar, basta executar este comando único, conforme documentado na página de manual do git-config .

git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf git@github.com:

GITHUB_TOKEN pode ser configurado como variável de ambiente ou colado diretamente

e depois instalo repositórios particulares do github, como: npm install user/repo --save


funciona também no Heroku, basta configurar o git config ...comando acima como heroku-prebuildscript package.jsone configurar GITHUB_TOKENcomo variável de configuração do Heroku.

Michal Moravcik
fonte
Isso também funciona na cadeia de criação do Microsoft Visual Studio Team Services, onde eu o executo como um "comando" antes da npm installetapa.
Lukx 6/03
2
Espetacular! Ótima solução para ambientes de CI! Eu tive que modificá-lo um pouco; Eu tive que mudar o final para...insteadOf ssh://[email protected]
Scott Rippey
2
Isso não parece afetar meu npm. Ele ainda está usando ssh ao executar npm install user/repo --save. Preciso configurar algo?
Marco Prins
1
Excelente solução para o ambiente de IC em que a configuração do SSH é uma dor (CloudBuild)! Muito obrigado por este!
Mathieu Bour
43

Existem várias maneiras de fazer isso como as pessoas apontam, mas as versões mais curtas são:

// from master
"depName": "user/repo",

// specific branch
"depName": "user/repo#branch",

// specific commit
"depName": "user/repo#commit",

// private repo
"depName": "git+https://[TOKEN]:[email protected]/user/repo.git"

por exemplo

"dependencies" : {
  "hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
  "hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
  "hexo-renderer-marked": "amejiarosario/dsa.js",
}
Adrian
fonte
3
Esta é a melhor resposta! <3 Direto ao ponto e até mostra exemplos de casos diferentes.
Renato Carvalho
Resposta sucinta para repositórios públicos, que infelizmente não foi a pergunta do OP. Ainda assim, isso me ajudou e eu gostei.
runderworld
Atualizei minha resposta para incluir o caso de repo privado
Adrian
29
"dependencies": {
  "some-package": "github:github_username/some-package"
}

ou apenas

"dependencies": {
  "some-package": "github_username/some-package"
}

https://docs.npmjs.com/files/package.json#github-urls

Rayron Victor
fonte
Funcionou perfeitamente e é o mais conciso. Teve erros de outras soluções. Obrigado!
Ryall 19/06
7

Como o Git usa curlsob o capô, você pode usar o ~/.netrcarquivo com as credenciais. Para o GitHub, seria algo assim:

machine github.com
  login <github username>
  password <password OR github access token>

Se você optar por usar access tokens, ele poderá ser gerado a partir de:

Configurações -> Configurações do desenvolvedor -> Tokens de acesso pessoal

Isso também deve funcionar se você estiver usando o Github Enterprise em sua própria corporação. basta colocar o URL do github da empresa em machinecampo.

LeOn - Han Li
fonte
trabalhou para mim com machine github.com login <token>em uma linha e "package": "https://github.com/acme/privaterepo.git#commit-ish"ou diretamente comnpm install https://github.com/acme/privaterepo.git#commit-ish
abernier
4

Aqui está uma versão mais detalhada de como usar o token do Github sem publicar no package.jsonarquivo.

  1. Criar token de acesso pessoal ao github
  2. URL de instalação reescrita em ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:[email protected]/".insteadOf https://[email protected]/
  1. Instale o repositório privado. Nível de log detalhado para depuração de erros de acesso.
npm install --loglevel verbose --save git+https://[email protected]/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

Caso o acesso ao Github falhe, tente executar o git ls-remote ...comando que onpm install will print

Martins Balodis
fonte
0

Para minha referência de repositório privado, não quis incluir um token seguro, e nenhum dos outros simples (ou seja, especificando apenas no package.json) funcionou. Aqui está o que funcionou:

  1. Foi para o GitHub.com
  2. Navegado para o repositório privado
  3. Clicou em "Clonar ou fazer o download" e no URL copiado (que não correspondem aos exemplos acima)
  4. Adicionado # commit-sha
  5. Ran npm install
O codificador
fonte