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?


4
git + https: // <token-from-github>: x-oauth-basic@github.com/ <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


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>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}

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>: x-oauth-basic@bitbucket.org/ <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.


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.


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://git@github.com
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]:x-oauth-basic@github.com/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",
}

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


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.


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>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  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://x-oauth-basic@github.com/<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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.