¿Depende de una rama o etiqueta usando una URL de git en un package.json?

399

Digamos que he bifurcado un módulo de nodo con una corrección de errores y quiero usar mi versión fija, en una rama de características, por supuesto, hasta que la corrección de errores se fusione y se libere.

¿Cómo haría referencia a mi versión fija en el dependenciesde mi package.json?

prisa
fuente

Respuestas:

569

De los documentos npm :

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

A partir de la versión 1.1.65 de NPM, puede hacer esto:

<user>/<project>#<branch>
prisa
fuente
130
A partir de npm 1.1.65, la URL de Github puede ser más concisa user/project. npmjs.org/doc/files/package.json.html Puede adjuntar la rama comouser/project#branch
dantheta
2
git://github.com/<user>/<project>.git#feature/blahfuncionó pero <user>/<project>.git#feature/blahno funcionó ... quizás su expresión regular necesita ser más avanzada para tener feature/blahen cuenta. Esto fue npmv1.4.28
pulkitsinghal 02 de
55
¿Cómo se incluye el número de versión?
Richard
1
@hurrymaplelad, ¿puedo hacer lo mismo para la solicitud de extracción? Si es así, ¿cómo es el comando?
roundrobin
3
Los documentos actualizados de NPM enlazan docs.npmjs.com/files/package.json#github-urls
kellen el
136

según el comentario de @ dantheta:

A partir de npm 1.1.65, la URL de Github puede ser un usuario / proyecto más conciso. npmjs.org/doc/files/package.json.html Puede adjuntar la rama como usuario / proyecto # rama

Entonces

"babel-eslint": "babel/babel-eslint",

O para la etiqueta v1.12.0 en jscs:

"jscs": "jscs-dev/node-jscs#v1.12.0",

Tenga en cuenta que si usa npm --save, obtendrá el git más largo

Desde 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.

URL de GitHub

A partir de la versión 1.1.65, puede referirse a las URL de GitHub como "foo": "user / foo-project". Al igual que con las URL de git, se puede incluir un sufijo commit-ish. Por ejemplo:

{"nombre": "foo",
"versión": "0.0.0",
"dependencias": {"express": "visionmedia / express", "mocha": "visionmedia / mocha # 4727d357ea"}}

justingordon
fuente
2
Dependiendo de un commit, sha1 debería ser la opción preferida, especialmente si depende de un repositorio que no está bajo su control. Las ramas y etiquetas de Git no son inmutables (se pueden eliminar / cambiar, maliciosamente / por accidente), mientras que es (casi) imposible crear una colisión sha1.
jakub.g
1
¿Puedo tener una rama Y un commit para commit-ish?
munchschair
45

Si desea usar develo featureramificar, o no ha publicado un paquete determinado en el registro NPM, o no puede porque es un módulo privado, puede señalar un git://URI en lugar de un número de versión en su package.json:

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://[email protected]:user/repo.git#ref"
}

La #refporción es opcional, y puede ser una rama (como master), una etiqueta (como 0.0.1) o una identificación de confirmación parcial o completa.

Fizer Khan
fuente
26

En la última versión de NPM puedes hacer:

npm install gitAuthor/gitRepo#tag

Si el repositorio es un paquete NPM válido, tendrá un alias automático en package.json como:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

Si pudieras agregar esto a la respuesta de @justingordon, ¡no hay necesidad de alias manual ahora!

vórtice
fuente
44
No, no lo es. Se instala incorrectamente. De alguna manera, no incluye toda la estructura de directorios del repositorio, solo algunos archivos como package.json, yarn.lock, readme y license. No hay carpetas src o dist.
StalkAlex
@StalkAlex docs.npmjs.com/cli/publish y luego verifique el repositorio que está instalando para los scripts de compilación. Tal vez están etiquetados o la instalación posterior no funciona para usted, es un problema para ese paquete específico de todos modos, ¡espero que esto ayude!
vórtice
@vortex gracias, ¿qué quieres decir exactamente con etiquetado? ¿Cómo esto hace tal problema?
StalkAlex
0

Si ayuda a alguien, probé todo lo anterior (https con modo token), y aún así nada funcionaba. No obtuve errores, pero no se instalaría nada en node_modules o package_lock.json. Si cambiara el token o cualquier letra en el nombre del repositorio o nombre de usuario, etc., obtendría un error. Entonces supe que tenía el token y el nombre de repositorio correctos.

Finalmente me di cuenta de que es porque el nombre de la dependencia que tenía en mi package.json no coincidía con el nombre del paquete.json del repositorio que estaba tratando de obtener. Incluso npm install --verbose no dice que haya ningún problema. Simplemente parece ignorar la dependencia sin error.

MattS
fuente