node.js - node - npm version patch
npm instala desde Git en una versión específica (5)
La respuesta aceptada no funcionó para mí. Esto es lo que estoy haciendo para extraer un paquete de github:
"dependencies": {
"package": "git://github.com/username/package.git#commit"
}
Supuse que había escrito un módulo para Node.js que me gustaría mantener en privado. Sé que puedo (debería) agregar la línea:
"private": "true"
al archivo package.json
, y también sé que puedo npm install
este módulo utilizando una ruta del sistema de archivos o un enlace a un repositorio de git, que incluye GitHub.
También sé que puedo poner una ruta del sistema de archivos o un enlace a un repositorio de git en package.json
, de modo que la parte de las dependencies
se parezca más o menos a esta:
"dependencies": {
"myprivatemodule": "[email protected]:..."
}
Lo que ahora quiero es no vincular a la última versión, sino a una específica. La única posibilidad que conozco es vincular a una confirmación específica usando su ID. Pero esto es mucho menos legible y peor mantenible que usar un número de versión como 0.3.1
.
Entonces mi pregunta es: ¿es posible especificar ese número de versión de todos modos y hacer que npm busque en el repositorio de git la última confirmación que incluya esta versión?
Si no es así, ¿cómo resuelves este problema en tus proyectos? ¿Vives con identificaciones de compromiso o hay una mejor solución para esto?
Mi ejemplo de comentario a @qubyte above se cortó, así que aquí hay algo que es más fácil de leer ...
El método @surjikal descrito above funciona para las confirmaciones de ramas, pero no funcionó para una confirmación de árbol que intentaba incluir.
El modo de archivo también funciona para commits. Por ejemplo, fetch @ a2fbf83
npm :
npm install https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz
hilo :
yarn add https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz
formato :
https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz
Aquí está la confirmación del árbol que requirió /archive/
mode:
yarn add https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz
para el compromiso de vuex relacionado
Si está haciendo esto con más de un módulo y desea tener más control sobre las versiones, debe considerar tener su propio registro privado de npm.
De esta manera puede npm publicar sus módulos en su registro npm privado y usar las entradas package.json de la misma manera que lo haría con los módulos públicos.
Si por versión te refieres a una etiqueta o un lanzamiento, entonces github proporciona enlaces de descarga para ellos. Por ejemplo, si quiero instalar la versión de fetch 0.3.2 (no está disponible en npm), entonces agrego a mi package.json
en dependencies
:
"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",
La única desventaja cuando se compara con el enfoque de compilación hash es que se garantiza que un hash no representa un código modificado, mientras que una etiqueta puede ser reemplazada. Afortunadamente esto rara vez sucede.
Actualizar:
En estos días el enfoque que uso es la notación compacta para una dependencia servida de GitHub:
"dependencies": {
"package": "github:username/package#commit"
}
Donde el compromiso puede ser cualquier cosa, como una etiqueta. En el caso de GitHub, puedes incluso soltar el github:
inicial github:
ya que es el predeterminado.
Una dependency debe estar disponible desde el registry
para instalarse simplemente dependency .
Ciertamente puede crear y usar su propio registro en lugar de registry.npmjs.org
si sus proyectos no se deben compartir públicamente.
Pero, si no está en un registro, tendrá que estar referenciado por URL o URL Git . Para especificar una versión con una URL de Git, incluya un <commit-ish>
apropiado, como una etiqueta, al final como un fragmento de URL .
Ejemplo, para una etiqueta llamada 0.3.1
:
"dependencies": {
"myprivatemodule": "[email protected]:...#0.3.1"
}
Nota : El fragmento de arriba muestra la URL base igual a la que se publicó en la pregunta.
La porción cortada (
...
) debe rellenarse:
"myprivatemodule": "[email protected]:{owner}/{project}.git#0.3.1"
Y, se necesitará un formato de dirección diferente cuando el acceso SSH no esté disponible:
"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"
Dependiendo de su sistema operativo, también es posible que pueda link
a la dependencia en otra carpeta donde lo haya clonado desde Github.