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?

vashishatashu
fuente
44
git + https: // <token-from-github>: [email protected]/ <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

leko
fuente
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>:[email protected]/<user>/<GitRepo>.git"
}
vashishatashu
fuente
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>: [email protected]/ <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.

momiabot
fuente
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.

Michal Moravcik
fuente
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://[email protected]
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]:[email protected]/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",
}
Adrian
fuente
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
29
"dependencies": {
  "some-package": "github:github_username/some-package"
}

o solo

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

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

Rayron Victor
fuente
Funcionó perfectamente y es el más conciso. Tenía errores de otras soluciones. ¡Gracias!
Ryall
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.

LeOn - Han Li
fuente
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>:[email protected]/".insteadOf https://[email protected]/
  1. Instalar repositorio privado. Nivel de registro detallado para depurar errores de acceso.
npm install --loglevel verbose --save git+https://[email protected]/<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

Martins Balodis
fuente
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
El codificador
fuente