npm instala repositorios privados de github por dependencia en package.json


211

Estoy tratando de instalar el repositorio privado de github por npm que incluye otros repositorios privados de github como dependencia.

He probado muchas formas y publicaciones, pero ninguna funciona. Esto es lo que estoy haciendo:

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

en package.json es como:

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

¿Cuál es la forma correcta de hacerlo?


44
git + https: // <token-from-github>: x-oauth-basic@github.com/ <user> / <GitRepo> .git Es compatible con la autenticación y funciona bien en todos los casos.
vashishatashu

Respuestas:


147

Prueba esto:

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

También puede probar esto, donde visionmedia / express es name / repo:

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

O (si existe el módulo de paquete npm):

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

Tomado de documentos NPM


1
npm ERR! Error al resolver git HEAD ( github.com/user/reponame.git ) fatal: argumento ambiguo 'commit-ish': revisión desconocida o ruta no en el árbol de trabajo.
vashishatashu

No funciona el #xxxx no es obligatorio, ya que si no se considera que se considera maestro y todo mi trabajo está en maestro. Alguna otra idea?
vashishatashu

¿El mismo resultado si elimina el encabezado (# commit-ish)?
leko

¿Cómo se llama su repositorio?
leko

28
@vashishatashu, con respecto a fatal: ambiguous argument 'commit-ish': unknown revision or path not in the working tree.Pretty obvio que commit-ishes solo una palabra de muestra que debe reemplazar con una shaconfirmación específica que necesita. (o elimine eso #commit-ishsi necesita la última confirmación en su rama maestra)
meandre

92

Lo siguiente funcionó bien en todos los escenarios que necesitaba:

"dependencies": {
"GitRepo": "git+https://<token-from-github>:x-oauth-basic@github.com/<user>/<GitRepo>.git"
}

2
¿Tiene un enlace de referencia para esta solución?
Ian

3
@ Ian: lo leí en alguna parte pero no tengo un enlace de referencia. Lo uso en producción durante más de un año sin ningún problema. Puede obtener un token de Github como: Configuración -> Aplicaciones -> Token de acceso personal -> Generar nuevo token. Este token puede tener privilegios de lectura / escritura o ambos según su caso de uso.
vashishatashu

66
@lan: para bitbucket puede usar la siguiente sintaxis: git clone https: // <bitbucket-team-token>: x-oauth-basic@bitbucket.org/ <team> / <BitRepo> <bitbucket-team-token> can se obtendrá de: Equipo -> Administrar equipo -> Clave API
vashishatashu

@vashishatashu, gracias por una gran idea. Sin embargo, obtengo "fatal: blahblah no encontrado" cuando intento esto, a pesar de que he otorgado acceso al repositorio al usuario en cuestión. ¿Algunas ideas?
Según Lundberg, el

2
Aquí hay un buen artículo sobre esta técnica: rzrsharp.net/2013/07/02/…
cyberwombat

76

Para aquellos de ustedes que vinieron aquí por directorios públicos, desde los documentos de npm: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

URL de Git como dependencias

Las URL de Git pueden tener la 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

El commit-ish puede ser cualquier etiqueta, sha o rama que se pueda proporcionar como argumento para git checkout. El valor predeterminado es maestro.


1
¿Qué significa "para directorios públicos"?
Dan Dascalescu

1
As of version 1.1.65, you can refer to GitHub urls as just “foo”: “user/foo-project”. Referencia de documentos de npmjs
Aleksandar

¿Qué significa el protocolo git+https://? ¿Utiliza el gitprotocolo para clonar y realiza nuevos cambios mientras avanza https?
tonix

60

La respuesta aceptada funciona, pero no me gusta mucho la idea de pegar tokens seguros en el package.json

Lo he encontrado en otro lugar, solo ejecute este comando de una sola vez como se documenta en la página de manual de git-config .

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

GITHUB_TOKEN puede configurarse como variable de entorno o pegarse directamente

y luego instalo repositorios privados de github como: npm install user/repo --save


funciona también en Heroku, solo configure el git config ...comando anterior como heroku-prebuildscript package.jsony configúrelo GITHUB_TOKENcomo variable de configuración Heroku.


Esto también funciona en Microsoft Visual Studio Team Services Build Chain, donde lo ejecuto como un "comando" justo antes del npm installpaso.
Lukx

2
¡Espectacular! ¡Gran solución para entornos CI! Tuve que modificarlo un poco; Tuve que cambiar el final a...insteadOf ssh://git@github.com
Scott Rippey

2
Esto no parece afectar mi npm. Todavía está usando ssh cuando se ejecuta npm install user/repo --save. ¿Hay algo que deba configurar?
Marco Prins

1
¡Excelente solución para el entorno de CI donde configurar SSH es una molestia (CloudBuild)! Muchas gracias por este!
Mathieu Bour

43

Hay varias formas de hacerlo como señalan las personas, pero las versiones más cortas son:

// 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"

p.ej

"dependencies" : {
  "hexo-renderer-marked": "amejiarosario/dsa.jsd#book",
  "hexo-renderer-marked": "amejiarosario/dsa.js#8ea61ce",
  "hexo-renderer-marked": "amejiarosario/dsa.js",
}

3
¡Esta es la mejor respuesta! <3 Directo al grano e incluso muestra ejemplos de diferentes casos.
Renato Carvalho

Respuesta sucinta para repositorios públicos, que desafortunadamente no era la pregunta del OP. Aún así, me ayudó y lo aprecié.
runderworld

Actualicé mi respuesta para incluir el caso del repositorio privado
Adrian


7

Dado que Git usa curlbajo el capó, puede usar el ~/.netrcarchivo con las credenciales. Para GitHub se vería algo así:

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

Si elige usar access tokens, se puede generar a partir de:

Configuración -> Configuración del desarrollador -> Fichas de acceso personal

Esto también debería funcionar si está utilizando Github Enterprise en su propia corporación. solo ponga su URL de github empresarial en el machinecampo.


trabajó para mí con machine github.com login <token>una línea "package": "https://github.com/acme/privaterepo.git#commit-ish"o directamente connpm install https://github.com/acme/privaterepo.git#commit-ish
abernier

4

Aquí hay una versión más detallada de cómo usar el token Github sin publicar en el package.jsonarchivo.

  1. Crear token de acceso personal de github
  2. Configuración de reescritura de URL en ~ / .gitconfig
git config --global url."https://<TOKEN HERE>:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
  1. Instalar repositorio privado. Nivel de registro detallado para depurar errores de acceso.
npm install --loglevel verbose --save git+https://x-oauth-basic@github.com/<USERNAME HERE>/<REPOSITORY HERE>.git#v0.1.27

En caso de que falle el acceso a Github, intente ejecutar el git ls-remote ...comando quenpm install will print


0

Para mi referencia de repositorio privado, no quería incluir un token seguro, y ninguno de los otros simples (es decir, especificar solo en package.json) funcionó. Esto es lo que funcionó:

  1. Fui a GitHub.com
  2. Navegado al repositorio privado
  3. Hizo clic en "Clonar o descargar" y URL copiada (que no coincidía con los ejemplos anteriores)
  4. Se agregó # commit-sha
  5. Ran npm install

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.