✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Hur man använder Git hooks för att upptäcka ändringar i en låsfil och visa ett meddelande

15

När vi arbetar i ett samarbetsteam måste en utvecklare då och då lägga till ett nytt paket till en filial som sedan slås samman till master. Någon kanske är omedveten om det och bara dra master och kör appen bara för att få den att krascha på grund av det saknade paketet. Låt oss se hur vi kan använda Git hooks för att upptäcka ändringar av a package.jsoneller a yarn.lockoch visa ett meddelande som uppmanar användaren att installera de saknade beroenden.

Vad är Git hooks?

Git-hooks avfyras när någon Git-händelse inträffar såsom en ny commit, pushing commits till en online-gren, pull commits, checkout en branch eller merge en branch. Dessa processer slutar med 0 när de slutar korrekt eller något annat värde när de slutar felaktigt.

Om den kopplade processen slutar med 0, fortsätter Git-åtgärden. Annars blockeras Git-åtgärden. Till exempel, om du konfigurerar en pre-commit Git-hook för att linta din kod, kommer Git att köra detta när du gör en git commit. Om linten misslyckas, kommer commit inte att gå igenom.

Git hooks är något integrerat i Git och listan över krokar är mycket omfattande. Till exempel har du pre-push, post-commit, post-checkout, post-merge och många andra Git-hooks.

Kör Git hooks med Husky

För att köra vissa uppgifter när Git-hakarna avfyras kan vi använda Husky- paketet för Node.js. Husky tillåter oss att specificera i en package.jsonfil vilka skript som ska köras när en Git hooks avfyras. Installera Husky-paketet med NPM:

npm i -D husky

eller garn:

yarn add -D husky

Nu måste du initiera Husky för Git hooks. Om du använder NPM:

npx husky install

och om du använder Garn

yarn husky install

och det är det, du har nu installerat och konfigurerat Husky för att köra Git hooks. Det är äntligen dags att definiera en krok!

Lägg till en Git-hook för post sammanfogning för att kontrollera ändringar av låsfilen

Vi vill köra lite kod för att varna oss om filen package-lock.jsoneller yarn.lockhar ändrats. Detta händer vanligtvis när vi drar masteroch dessa filer har ändrats. Vi kan ställa in en krok som ska köras när vi slår ihop en gren.

För att specificera våra Git hooks till Husky definierar vi dem i package.jsonfilen. Lägg till detta som en nyckel på toppnivå:

"husky": { "hooks": { "post-merge": "./githooks/post-merge-hook.sh" } }

Vad det här säger är att efter att en gren har slagits samman kör vi det här skriptet. Nu måste vi skapa det. Skapa en mapp, lägg till en fil i den och ställ in den så att den är körbar:

mkdir githooks && cd githooks && touch post-merge-hook.sh && chmod +x post-merge-hook.sh

Om du inte ställer in den på att vara körbar kommer du att stöta på felet "Permission denied" när Husky försöker köra denna Git-hook. Redigera nu filen med Vim eller din favoritredigerare och klistra in detta i den:

changedFiles="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" runOnChange() { echo "$changedFiles" | grep -q "$1" && echo -e "$2" } runOnChange package-lock.json "033[35m*******************************************************************************n* 033[33mpackage-lock.json033[35m has changed. Run033[33m npm install033[35m to update your dependencies. *n*******************************************************************************" exit 0

Detta kommer att skriva ut ett meddelande i lila med orden package-lock.jsonoch npm installi orange. Detta skript kontrollerar om package-lock.jsondet har uppdaterats och om du vill testa yarn.lockistället måste du helt enkelt byta ut filnamnet.

Testa låsfiländringskontrollen

Att testa detta är inte alltför komplicerat. Du behöver i princip bara skapa en ny gren, installera något paket så att det package-lock.jsonändras, commit det och byta till den tidigare grenen. Allt som kan göras med detta kommando:

git checkout -b testbranch && npm i -D lint-staged && git add. && git commit -m "test" && git checkout -

Nu måste du slå ihop den med den här grenen

git merge testbranch

Detta kommer att utlösa post-merge-kroken och kommer att köra vårt skript. Du kommer då att se detta meddelande på kommandoraden eftersom det package-lock.jsonhar ändrats under sammanslagningen:

Upptäcker en låsfiländring i VS-kod

Detta var bara en användning. Git hooks kan användas på många sätt, till exempel för att köra det populära paketet Prettier innan du begår något för att formatera din kod.

Det finns alternativ för just det här fallet, att kontrollera om package-lock.jsonden har uppdaterats. Till exempel för VS Code finns det ett snyggt paket Uppdatera NPM-paket som kommer att uppmana dig att uppdatera dina paket om det upptäcker en ändring. Det kommer att köras oavsett om du har ställt in Git-hooks eller inte. En annan trevlig sak är att det kommer att fungera när du byter gren, även utan att slå ihop en av dem i den andra.

Hur man använder Git hooks för att upptäcka ändringar i en låsfil och visa ett meddelande

Men fördelen med det vi har implementerat här är att det kommer att köras på kommandoraden och det beror inte på en viss kodredigerare. Om du till exempel arbetar med ett projekt med öppen källkod, kanske du vill ställa in det som beskrivs här så att det finns en gemensam grund för alla inblandade utvecklare oavsett deras inställning.

Inspelningskälla: startfunction.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer