mettre à jour automatiquement la version package.json

183

Avant de faire une petite version et de l'étiqueter, j'aimerais mettre à jour le package.json pour refléter la nouvelle version du programme.

Existe-t-il un moyen de modifier package.jsonautomatiquement le fichier ?

Serait en utilisant une git pre-release hookaide?

tUrG0n
la source
1
Pourquoi ne faites-vous pas un script shell qui édite package.json, valide puis tague?
gustavotkg
oui, donc le hook de pré-version invoquerait ce script, non?
tUrG0n

Réponses:

94

npm versionest probablement la bonne réponse. Juste pour donner une alternative, je recommande grunt-bump . Il est maintenu par l'un des gars d'angular.js.

Usage:

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 vous utilisez de toute façon grunt, cela pourrait être la solution la plus simple.

zemirco
la source
12
Et si vous utilisez gulpjs : gulp -bump :)
GabLeRoux
J'ai codé Vik pour cela, ce qui heurte npm, Bower, etc. d'un seul coup: github.com/Wildhoney/Vik
Wildhoney
8
pourquoi utiliser des bibliothèques externes lorsque npm a cette fonctionnalité intégrée?
linuxdan
8
Quel est l'avantage de les utiliser npm version?
Steve Bennett
3
@ConAntonakos Oui. Essayez quelque chose comme npm --no-git-tag-version version patch.
Tong Shen
165

Bonne réponse

Pour ce faire, il suffit de npm version patch=)

Ma vieille réponse

Il n'y a pas de pre-releasecrochet à l'origine git. Au moins, man githooksne le montre pas.

Si vous utilisez git-extra( https://github.com/visionmedia/git-extras ), par exemple, vous pouvez utiliser un pre-releasehook qui est implémenté par celui-ci, comme vous pouvez le voir sur https://github.com/visionmedia/ git-extras / blob / master / bin / git-release . Il suffit d'un .git/hook/pre-release.shfichier exécutable qui édite votre package.jsonfichier. La validation, le push et le marquage seront effectués par la git releasecommande.

Si vous n'utilisez aucune extension pour git, vous pouvez écrire un script shell (je le nomme git-release.sh) et vous pouvez l'aliaser git releaseavec quelque chose comme:

git config --global alias.release '!sh path/to/pre-release.sh $1'

Vous pouvez, que, utiliser git release 0.4qui exécutera path/to/pre-release.sh 0.4. Votre script peut modifier package.json, créer la balise et la pousser vers le serveur.

gustavotkg
la source
pourriez-vous partager un extrait de code de ce à quoi ressemblerait le script? : D
tUrG0n
j'utilise en fait le repo git-extra de visionmedia. Mais git releasene met pas à jour le package.json en conséquence ... github.com/visionmedia/git-extras/issues/150 : D
tUrG0n
Alors, créez simplement .git/hooks/pre-release.shcontenant: echo -e "{\n\"version\": "$1"\n}" > package.jsonet essayez d'utilisergit release $version
gustavotkg
5
comme commenté ici npm version patch ou npm version 0.3.1 le résoudra! Pourriez-vous mettre à jour votre réponse en conséquence? ty !!
tUrG0n
75

C'est ce que je fais normalement avec mes projets:

npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish

La première ligne npm version patchaugmentera la version du correctif de 1 (xx1 à xx2) dans package.json. Ensuite, vous ajoutez tous les fichiers - y compris ceux package.jsonqui ont été modifiés à ce moment-là. Ensuite, l'habituel git commitet git push, et enfin npm publishpour publier le module.

J'espère que cela a du sens...

Merc.

Merc
la source
9
Autant que je sache, npm version patchle commet-il lui-même; cependant, pour pousser la balise vers github, je pense que vous devez également le faire git push --tags.
ChrisV
@ChrisV est correct - augmente npm version patchle numéro de version et
Dan Esparza
2
@DanEsparza Cela pourrait être un problème. npm version patchne commet rien pour moi.
Mordred
@Mordred Hmmm ... peut-être. Je ne vois rien dans la documentation de npm config à ce sujet, mais se pourrait-il que vous n'ayez pas de git dans votre chemin ou quelque chose?
Dan Esparza
@DanEsparza git est définitivement dans le chemin car je commets à partir du même dossier que je lance npm version.
Mordred
29

Pour donner une approche plus actuelle.

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"
  }

Ensuite, vous l'exécutez:

npm version minor --force -m "Some message to commit"

Qui va:

  1. ... exécuter des tests ...

  2. passez package.jsonà une version mineure suivante (par exemple: 1.8.1 à 1.9.0)

  3. pousser vos changements

  4. créer une nouvelle version de balise git et

  5. publiez votre package npm.

--forcec'est montrer qui est le patron! Blagues à part voir https://github.com/npm/npm/issues/8620

Jonatas Walker
la source
3
Vous pouvez également ajouter un script tel "deploy-minor": "npm version minor --force -m \"version %s\""que tout ce dont vous devez vous souvenir est npm run deploy-minor:)
Kristofor Carle
23

En complément, npm versionvous pouvez utiliser l' --no-git-tag-versionindicateur si vous voulez un changement de version mais pas de balise ou un nouveau commit:

npm --no-git-tag-version version patch

https://docs.npmjs.com/cli/version

Attache-moi
la source
17

Si vous utilisez du fil, vous pouvez utiliser

yarn version --patch

Cela incrémentera la package.jsonversion par patch (0.0.x), le commit et le marquera avec le formatv0.0.0

De même, vous pouvez modifier la version mineure ou majeure en utilisant --minorou--major

Lorsque vous poussez vers git, assurez-vous de pousser également les balises avec --follow-tags

git push --follow-tags

Vous pouvez également créer un script pour cela

    "release-it": "yarn version --patch && git push --follow-tags"

Exécutez-le simplement en tapant yarn release-it

Eric Kim
la source
11

J'utilise husky et git-branch-is :

À 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)",
    }
  }
}

Avant Husky V1:

"scripts": {
  ...
  "postmerge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
  ...
},

En savoir plus sur la version npm

Webpack ou Vue.js

Si vous utilisez webpack ou Vue.js, vous pouvez l'afficher dans l'interface utilisateur en utilisant la version Auto inject - plugin Webpack

NUXT

Dans nuxt.config.js:

var WebpackAutoInject = require('webpack-auto-inject-version');

module.exports = {
  build: {
    plugins: [
      new WebpackAutoInject({
        // options
        // example:
        components: {
          InjectAsComment: false
        },
      }),
    ]
  },
}

À l'intérieur de votre templatepar exemple dans le pied de page:

<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
Anima-t3d
la source
J'aime cette option husky la meilleure, même si je ne pense pas que cela fonctionne plus tel quel. Je ne pense pas que «postmerge» existe, «pre-push» est probablement la meilleure option. et les résultats de `` git-branch-is '' ne fonctionnent pas vraiment car ils se trompent et plantent fondamentalement tout le message (comme il vérifie à la fois le maître et le développeur, il y aura une erreur sur l'un d'eux)
Phil
@Phil Vous pouvez toujours l'utiliser postmerge, mais il est maintenant post-mergedans la husky: {hooks:{}}configuration. Quel problème avez-vous git-branch-is?
Anima-t3d
ce serait juste une erreur pour moi au lieu de courir. Pas de soucis cependant, j'ai fini par choisir cette option: marketplace.visualstudio.com/...
Phil
1
@Phil merci pour le suivi. Je viens d'essayer avec la version mise à jour et je n'ai aucune erreur, peut-être que quelque chose ne va pas avec votre commande post-fusion elle-même.
Anima-t3d
5

Je veux clarifier les réponses à cette question.

Même s'il y a des réponses ici qui s'attaquent correctement au problème et fournissent une solution, ce ne sont pas les bonnes. La bonne réponse à cette question est d'utilisernpm version

Existe-t-il un moyen de modifier automatiquement le fichier package.json?

Oui, ce que vous pouvez faire pour que cela se produise est d'exécuter la npm versioncommande lorsque cela est nécessaire, vous pouvez en savoir plus à ce sujet ici version npm , mais l'utilisation de base serait npm version patchet il ajouterait le 3e ordre de chiffres sur votre package.jsonversion (1.0. X )

Est-ce que l'utilisation d'un hook de pré-version git aiderait?

Vous pouvez configurer pour exécuter la npm versioncommande sur le hook de pré-version, selon vos besoins, mais cela dépend si c'est ce dont vous avez besoin ou non dans votre canal CD / CI, mais sans la npm versioncommande, un git pre-releasehook ne peut rien faire "facilement" avec lepackage.json

La raison pour laquelle npm versionla réponse est correcte est la suivante:

  1. Si l'utilisateur utilise une structure de dossiers dans laquelle il a un, package.jsonil utilise npms'il utilise, npmil a accès au fichier npm scripts.
  2. S'il y a accès, npm scriptsil a accès à la npm versioncommande.
  3. En utilisant cette commande, il n'a plus besoin d'installer quoi que ce soit de plus dans son ordinateur ou sur son tube CD / CI, ce qui à long terme réduira l'effort de maintenabilité du projet et aidera à l'installation.

Les autres réponses dans lesquelles d'autres outils sont proposés sont incorrectes.

gulp-bump fonctionne mais nécessite un autre package supplémentaire qui pourrait créer des problèmes à long terme (point 3 de ma réponse)

grunt-bump fonctionne mais nécessite un autre package supplémentaire qui pourrait créer des problèmes à long terme (point 3 de ma réponse)

Alejandro Vales
la source
2

Tout d'abord, vous devez comprendre les règles de mise à niveau du numéro de version. Vous pouvez en savoir plus sur la version sémantique ici.

Chaque version aura une version xyz où elle définit à des fins différentes, comme indiqué ci-dessous.

  1. x - majeur, jusqu'à ce que vous ayez des changements majeurs et qu'il y a une énorme différence de changements.
  2. y - mineur, augmenter lorsque vous avez une nouvelle fonctionnalité ou une amélioration.
  3. z - patch, augmentez-le lorsque vous avez corrigé des bogues ou annulez les modifications de la version précédente.

Pour exécuter les scripts, vous pouvez le définir dans votre package.json.

"script": {
    "buildmajor": "npm version major && ng build --prod",
    "buildminor": "npm version minor && ng build --prod",
    "buildpatch": "npm version patch && ng build --prod"
}

Dans votre terminal, il vous suffit d'exécuter npm en fonction de vos besoins, comme

npm run buildpatch

Si vous l'exécutez dans git repo, la version par défaut de git-tag-version est true et si vous ne souhaitez pas le faire, vous pouvez ajouter la commande ci-dessous dans vos scripts:

--no-git-tag-version

par exemple: "npm --no-git-tag-version version major && ng build --prod"

Mnémo
la source
0

J'ai créé un outil qui peut effectuer un contrôle de version sémantique automatique basé sur les balises dans les messages de validation, connus sous le nom de types de changement. Cela suit de près la convention de message de validation angulaire ainsi que la spécification de versioning sémantique.

Vous pouvez utiliser cet outil pour changer automatiquement la version dans package.json à l'aide de l'interface de ligne de commande npm (ceci est décrit ici ).

En outre, il peut créer un journal des modifications à partir de ces validations et dispose également d'un menu (avec un correcteur orthographique pour les messages de validation) pour créer des validations en fonction du type de modification. Je recommande vivement de le vérifier et de lire des documents pour voir tout ce qui peut être accompli avec.

J'ai écrit l'outil parce que je n'ai rien trouvé qui convenait à mes besoins pour mon pipeline CICD pour automatiser la gestion des versions sémantiques. Je préfère me concentrer sur les changements réels plutôt que sur ce que devrait être la version et c'est là que mon outil sauve la mise.

Pour plus d'informations sur la justification de l'outil, veuillez consulter ceci .

Daniel Eagle
la source