Antes de hacer un pequeño lanzamiento y etiquetarlo, me gustaría actualizar el package.json para reflejar la nueva versión del programa.
¿Hay alguna manera de editar el archivo package.jsonautomáticamente?
¿Usaría una git pre-release hookayuda?
Antes de hacer un pequeño lanzamiento y etiquetarlo, me gustaría actualizar el package.json para reflejar la nueva versión del programa.
¿Hay alguna manera de editar el archivo package.jsonautomáticamente?
¿Usaría una git pre-release hookayuda?
Respuestas:
npm versionEs probablemente la respuesta correcta. Solo para dar una alternativa, recomiendo grunt-bump . Es mantenido por uno de los chicos de angular.js.
Uso:
grunt bump
>> Version bumped to 0.0.2
grunt bump:patch
>> Version bumped to 0.0.3
grunt bump:minor
>> Version bumped to 0.1.0
grunt bump
>> Version bumped to 0.1.1
grunt bump:major
>> Version bumped to 1.0.0
Si de todos modos está usando gruñido, podría ser la solución más simple.
npm version?
npm --no-git-tag-version version patch.
Respuesta correcta
Para hacerlo, solo npm version patch=)
Mi vieja respuesta
No hay pre-releasegancho originalmente en git. Al menos, man githooksno lo muestra.
Si está usando git-extra( https://github.com/visionmedia/git-extras ), por ejemplo, puede usar un pre-releasegancho implementado por él, como puede ver en https://github.com/visionmedia/ git-extras / blob / master / bin / git-release . Solo se necesita un .git/hook/pre-release.sharchivo ejecutable que edite su package.jsonarchivo. El git releasecomando confirmará, empujará y etiquetará .
Si no está usando ninguna extensión para git, puede escribir un script de shell (lo nombraré git-release.sh) y luego puede usar un alias git releasecon algo como:
git config --global alias.release '!sh path/to/pre-release.sh $1'
Puede, que, usar git release 0.4cual ejecutará path/to/pre-release.sh 0.4. Su secuencia de comandos puede editar package.json, crear la etiqueta y enviarla al servidor.
git releaseno actualiza el package.json en consecuencia ... github.com/visionmedia/git-extras/issues/150 : D
.git/hooks/pre-release.shcontenga: echo -e "{\n\"version\": "$1"\n}" > package.jsone intenta usargit release $version
Esto es lo que normalmente hago con mis proyectos:
npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish
La primera línea, npm version patchaumentará la versión del parche en 1 (xx1 a xx2) en package.json. Luego agrega todos los archivos, incluido el package.jsonque en ese momento se ha modificado. Luego, lo habitual git commity git push, y finalmente npm publishpublicar el módulo.
Espero que esto tenga sentido...
Merc.
npm version patchel compromiso en sí mismo; sin embargo, para empujar la etiqueta a github, creo que también debes hacerlo git push --tags.
npm version patchtopa el número de versión e inmediatamente confirma el cambio
npm version patchNo comete nada por mí.
npm version.
Para dar un enfoque más actualizado.
package.json "scripts": {
"eslint": "eslint index.js",
"pretest": "npm install",
"test": "npm run eslint",
"preversion": "npm run test",
"version": "",
"postversion": "git push && git push --tags && npm publish"
}
Entonces lo ejecutas:
npm version minor --force -m "Some message to commit"
Que lo hará:
... ejecuta pruebas ...
cambie su package.jsona una próxima versión menor (por ejemplo: 1.8.1 a 1.9.0)
empuja tus cambios
crear una nueva versión de etiqueta git y
publica tu paquete npm.
--forcees mostrar quién es el jefe! Bromas a un lado ver https://github.com/npm/npm/issues/8620
"deploy-minor": "npm version minor --force -m \"version %s\""para que todo lo que necesite recordar sea npm run deploy-minor:)
Como complemento npm version, puede usar el --no-git-tag-versionindicador si desea un aumento de versión pero sin etiqueta o una nueva confirmación:
npm --no-git-tag-version version patch
Si usa hilo, puede usar
yarn version --patch
Esto incrementará la package.jsonversión por parche (0.0.x), confirmación y la etiquetará con formatov0.0.0
Del mismo modo, puede topar versiones menores o mayores utilizando --minoro--major
Al presionar para git, asegúrese de presionar también las etiquetas con --follow-tags
git push --follow-tags
También puedes crear un script para ello
"release-it": "yarn version --patch && git push --follow-tags"
Simplemente ejecútalo escribiendo yarn release-it
Estoy usando husky y git-branch-is :
A partir de Husky v1 +:
// package.json
{
"husky": {
"hooks": {
"post-merge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
}
}
}
Antes de Husky V1:
"scripts": {
...
"postmerge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
...
},
Leer más sobre la versión npm
Webpack o Vue.js
Si está utilizando webpack o Vue.js, puede mostrar esto en la interfaz de usuario utilizando la versión de inyección automática: complemento de Webpack
NUXT
En nuxt.config.js:
var WebpackAutoInject = require('webpack-auto-inject-version');
module.exports = {
build: {
plugins: [
new WebpackAutoInject({
// options
// example:
components: {
InjectAsComment: false
},
}),
]
},
}
Dentro de su templatepor ejemplo en el pie de página:
<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
postmerge, pero ahora está post-mergedentro de la husky: {hooks:{}}configuración. ¿Qué problema tienes con git-branch-is?
Quiero agregar algo de claridad a las respuestas que recibió esta pregunta.
Aunque aquí hay algunas respuestas que abordan adecuadamente el problema y brindan una solución, no son las correctas. La respuesta correcta a esta pregunta es usarnpm version
¿Hay alguna manera de editar el archivo package.json automáticamente?
Sí, lo que puede hacer para que esto suceda es ejecutar el npm versioncomando cuando sea necesario, puede leer más sobre esto aquí versión npm , pero el uso base sería npm version patchy agregaría el orden de 3 dígitos en su package.jsonversión (1.0. X )
¿Usaría un gancho de prelanzamiento git?
Puede configurar para ejecutar el npm versioncomando en el gancho de prelanzamiento, según lo necesite, pero eso depende de si eso es lo que necesita o no en su tubería de CD / CI, pero sin el npm versioncomando un git pre-releasegancho no puede hacer nada "fácilmente" con elpackage.json
La razón por npm versionla cual es la respuesta correcta es la siguiente:
package.jsonque está usando, npmsi está usando npm, tiene acceso al npm scripts.npm scriptsél tiene acceso a lanpm version comando.Las otras respuestas en las que se proponen otras herramientas son incorrectas.
gulp-bump funciona pero requiere otro paquete adicional que podría crear problemas a largo plazo (punto 3 de mi respuesta)
grunt-bump funciona pero requiere otro paquete adicional que podría crear problemas a largo plazo (punto 3 de mi respuesta)
Primero, debe comprender las reglas para actualizar el número de versión. Puedes leer más sobre la versión semántica aquí.
Cada versión tendrá una versión xyz donde se define para diferentes propósitos como se muestra a continuación.
Para ejecutar los scripts, puede definirlo en su package.json.
"script": {
"buildmajor": "npm version major && ng build --prod",
"buildminor": "npm version minor && ng build --prod",
"buildpatch": "npm version patch && ng build --prod"
}
En su terminal, solo necesita ejecutar npm según sus necesidades como
npm run buildpatch
Si lo ejecuta en git repo, la versión predeterminada de git-tag-true es verdadera y si no desea hacerlo, puede agregar el siguiente comando en sus scripts:
--no-git-tag-version
por ejemplo: "npm --no-git-tag-version version major && ng build --prod"
He creado una herramienta que puede realizar versiones semánticas automáticas basadas en las etiquetas en los mensajes de confirmación, conocidos como tipos de cambio. Esto sigue de cerca la Convención de mensajes de confirmación angular junto con la Especificación de versiones semánticas.
Puede usar esta herramienta para cambiar automáticamente la versión en el package.json usando la CLI de npm (esto se describe aquí ).
Además, puede crear un registro de cambios a partir de estas confirmaciones y también tiene un menú (con un corrector ortográfico para mensajes de confirmación) para crear confirmaciones basadas en el tipo de cambio. Recomiendo consultarlo y leer documentos para ver todo lo que se puede lograr con él.
Escribí la herramienta porque no pude encontrar nada que se adaptara a mis necesidades para que mi CICD Pipeline automatizara las versiones semánticas. Prefiero centrarme en cuáles son los cambios reales en lugar de cuál debería ser la versión y ahí es donde mi herramienta salva el día.
Para obtener más información sobre la justificación de la herramienta, consulte esto .