Avant de commettre

Il y a certaines actions qui doivent être effectuées avant que le code n'entre dans le commit et le référentiel, donc au moins pour ne pas souffrir plus tard avec un rebase à chaque fois. La solution que je vais décrire est courte et simple, mais elle facilite beaucoup la vie d'un développeur.





Le but le plus évident est d'exécuter des tests, mais pour moi, il s'agit également de créer un bundle. Comme je n'utilise pas watch et que j'oublie régulièrement d'exécuter la commande build à la main, les versions non pertinentes des bundles entrent souvent dans le commit, et les versions actuelles doivent être validées ensuite. Il s'avère pas très soigné. Pour javascript, l'utilitaire de pré-commit nous aidera. Il utilise un hook git, mais vous donne la possibilité de ne pas entrer dans tous ces tripes et de gérer la galaxie sans quitter npm. De plus, une telle mécanique ne sera pas oubliée lors du changement de référentiel.





Allons-y de manière pratique: ajoutez la bibliothèque au projet





npm i pre-commit --save-dev
      
      



Dans package.json, ajoutez la commande build à la section de pré-validation





"pre-commit": [
 "build"
],
      
      



Cependant, les fichiers de bundle collectés ne seront pas inclus dans le commit, car Le git doit indiquer explicitement les fichiers modifiés et ajoutés et tout ajouter semble assez dangereux. Pour que tout commence à fonctionner correctement, définissons la commande add-bundles qui ajoute des fichiers bundle.





"scripts": {
 "build": "npx rollup --config rollup.config.js",
 "add-bundles": "git add dist/*",
 "test": "echo \"Error: no test specified\" && exit 1"
},
      
      



Et ajoutez la commande elle-même à la section de pré-validation





"pre-commit": [
 "build", "add-bundles"
],
      
      



Maintenant, juste avant le commit, le bundle est immédiatement assemblé et ajouté au commit. Si vous avez besoin d'un exemple de travail complet, il y en a un dans le référentiel de cette bibliothèque .





Ce package a des analogues pour d'autres hooks, par exemple celui-ci .








All Articles