Supongo que he 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 package.json
archivo, y también sé que puedo npm install
usar este módulo usando una ruta del sistema de archivos o un enlace a un repositorio git, incluido GitHub.
También sé que puedo poner una ruta de sistema de archivos o un enlace a un repositorio git package.json
, para que la dependencies
parte se vea más o menos así:
"dependencies": {
"myprivatemodule": "[email protected]:..."
}
Lo que ahora quiero no es vincular a la última versión, sino a una específica. La única posibilidad que conozco es vincular a un commit específico 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 dicho número de versión de todos modos y hacer que npm busque en el repositorio de git la última confirmación que incluye esta versión?
Si no, ¿cómo resuelve este problema en sus proyectos? ¿Vive con ID de confirmación o hay una mejor solución para esto?
git tag -a "1.0.0"
y presionégit push --tags
, luego agregué#v1.0.0
al final de lagit+ssh
dependencia. Pero anpm update
nada pasa.v
era necesario. Después de la#
, el fragmento debe coincidir con el nombre completo de la etiqueta (u otro commitsh ) - en su caso,#1.0.0
.npm i {owner}/{project}#{tag}
o agregar"{library}": "github:{owner}/{project}#{tag}"
a package.json en lugar de usar[email protected]
ogit://github.com
La respuesta aceptada no funcionó para mí. Esto es lo que estoy haciendo para extraer un paquete de github:
O agregándolo manualmente en package.json:
fuente
"package": "git+https://github.com/username/package.git#commit"
#tag
que generalmente apunta a un número de versióngit tag -a v1.0.1 && git push --tag && git push
como @Jonathan Lonowski también dijo en un comentario.Si por versión te refieres a una etiqueta o un lanzamiento, entonces Github proporciona enlaces de descarga para esos. Por ejemplo, si quiero instalar fetch versión 0.3.2 (no está disponible en npm), entonces agrego a mi
package.json
debajodependencies
:La única desventaja en comparación con el enfoque de hash de confirmación es que se garantiza que un hash no represente un código modificado, mientras que una etiqueta podría reemplazarse. Afortunadamente esto rara vez sucede.
Actualizar:
En estos días, el enfoque que uso es la notación compacta para una dependencia servida por GitHub:
Donde commit puede ser cualquier cosa commiting, como una etiqueta. En el caso de GitHub, incluso puede soltar la inicial
github:
ya que es la predeterminada.fuente
Mi comentario de ejemplo a @qubyte anterior se cortó, así que aquí hay algo que es más fácil de leer ...
El método @surjikal descrito anteriormente funciona para los commits de rama, pero no funcionó para un commit de árbol que estaba intentando incluir.
El modo de archivo también funciona para confirmaciones. Por ejemplo, buscar @ a2fbf83
npm :
hilo :
formato :
Aquí está la confirmación del árbol que requiere el
/archive/
modo:para el commit vuex relacionado
fuente
Este comando instala el paquete npm
username/package
desde un git commit específico:Aquí
3d0a21cc
están los primeros 8 caracteres de commit hash.fuente
Describo aquí un problema que enfrenté cuando lo ejecuté
npm install
: el paquete no aparece ennode_modules
.El problema era que el
name
valorpackage.json
del paquete instalado era diferente del nombre del paquete importado (clavepackage.json
de mi proyecto).Así que si el nombre del proyecto es instalada
some-package
(valor en su nombrepackage.json
) y luego en elpackage.json
de su proyecto de escritura:"some-package": "owner/some-repo#tag"
.fuente
name
requisito no se menciona a menudo en la red ... (no es que pueda incurrir en eso, al menos).npm install --save git+https://<remote-github-repo-url>
es una forma bastante segura de no volver a enfrentar este problema en el futuro.Necesitaba ejecutar dos versiones de tfjs-core y descubrí que ambas debían construirse después de ser instaladas.
package.json:
Luego:
Y finalmente, para usar las bibliotecas:
Esto funcionó muy bien, pero ciertamente es #hoodrat
fuente
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 npm privado.
De esta manera, puede publicar sus módulos en su registro privado de npm y usar entradas package.json de la misma manera que lo haría para los módulos públicos.
https://docs.npmjs.com/files/package.json#dependencies
fuente