Grunt (mjukvara)
Originalförfattare | Ben Alman |
---|---|
Utvecklare | Ben Alman, Tyler Kellen, Kyle Robinson Young, Vlad Filippov, Sindre Sorhus, Isaac Durazo, Jarrod Overson, Tim Branyen, Jörn Zaefferer, James Smith, Dave Geddes |
Initial release | 4 april 2016 |
Stabil frisättning | 1.4.1 / 22 april 2021
|
Förvar | |
Skrivet i | JavaScript |
Operativ system | Linux , macOS , Windows |
Plattform | Node.js |
Tillgänglig i | engelsk |
Typ | Task Runner, Build-verktyg |
Licens | MIT-licens |
Hemsida |
Grunt är en JavaScript- uppdragskörare , ett verktyg som används för att automatiskt utföra frekventa uppgifter som minifiering , kompilering , enhetstestning och linting . Den använder ett kommandoradsgränssnitt för att köra anpassade uppgifter definierade i en fil (känd som en Gruntfil). Grunt skapades av Ben Alman och är skrivet i Node.js. Den distribueras via npm . I oktober 2022 fanns det mer än 6 000 plugins tillgängliga i Grunt-ekosystemet.
Företag som använder Grunt inkluderar Adobe Systems , jQuery , Twitter , Mozilla , Bootstrap , Cloudant , Opera , WordPress , Walmart och Microsoft .
Översikt
Grunt skapades ursprungligen av Ben Alman 2012 som ett effektivt alternativ för att förenkla skrivning och underhåll av en uppsättning JavaScript-byggprocessuppgifter i en stor fil. Det designades som ett uppgiftsbaserat kommandoradsbyggverktyg för JavaScript-projekt .
Grunt används främst för att automatisera uppgifter som måste utföras rutinmässigt. Det finns tusentals plugins som kan installeras och användas direkt för att utföra några vanliga uppgifter. En av Grunts mest önskvärda funktioner är att den är mycket anpassningsbar – dvs den tillåter utvecklare att lägga till, utöka och ändra anpassade uppgifter för att passa deras personliga behov; varje uppgift har en uppsättning konfigurationsalternativ som användaren kan ställa in. Dessutom erbjuder Grunt möjligheten att definiera anpassade uppgifter, som kan kombinera flera befintliga uppgifter till en enda uppgift eller lägga till helt ny funktionalitet.
Grundläggande koncept
Kommandoradsgränssnitt
Grunts kommandoradsgränssnitt (CLI) kan installeras globalt genom npm . Genom att köra grunt-
kommandot laddas och körs versionen av Grunt som är lokalt installerad i den aktuella katalogen. Därför kan vi underhålla olika versioner av Grunt i olika mappar och köra var och en som vi vill.
Filer
För att använda Grunt i ett projekt måste två specifika filer skapas i rotkatalogen, nämligen package.json och en Gruntfil.
-
package.json - innehåller metadata för projektet inklusive namn, version, beskrivning, författare, licenser och dess beroenden (Grunt-plugins som krävs av projektet). Alla beroenden listas antingen i sektionen
beroenden
ellerdevDependencies .
- Gruntfil - en giltig JavaScript- eller CoffeeScript- fil med namnet "Gruntfile.js" eller "Gruntfile.coffee" som innehåller kod för att konfigurera uppgifter, ladda befintliga plugins och/eller skapa anpassade uppgifter.
Uppgifter
Uppgifter är de moduler som utför ett specificerat jobb. De definieras i Gruntfilen.
Utvecklare kan ladda fördefinierade uppgifter från befintliga Grunt-plugins och/eller skriva anpassad kod för att definiera sina egna uppgifter beroende på deras krav. När de väl har definierats kan dessa uppgifter köras från kommandoraden genom att helt enkelt köra grunt <taskname>
. Om <uppgiftsnamn>
som definieras i Gruntfilen är 'default' så räcker det med att köra grunt .
Exempel
Följande är ett exempel på en Gruntfil skriven i JavaScript som visar hur man laddar plugins, skapar anpassade uppgifter och konfigurerar dem:
modul . exports = function ( grunt ) { // Uppgiftskonfiguration grunt . initConfig ({ taskName1 : 'Task1 Configuration' , taskName2 : 'Task2 Configuration' }); // Laddar plugins grunt . loadNpmTasks ( 'pluginName1' ); grymta . loadNpmTasks ( 'pluginName2' ); // Anpassade uppgifter grymtar . registerTask ( 'customTaskName1' , 'Custom task description' , function ( taskParameter ) { // Custom statements }); // Kombinera flera uppgifter till en enda uppgift grymtande . registerTask ( 'customTaskName2' , [ 'taskName1' , 'customTaskName1' ]); // Standarduppgift - körs om uppgiftsnamnet inte anges grunt . registerTask ( 'default' , [ 'customTaskName2' ]); };
I exemplet ovan kommer att köra kommandot grunt
<customtaskName2>
som har definierats ovan som en kombination av både <taskName1>
och <customtaskName1>
.
Plugins
Plugins är återanvändbar kod som definierar en uppsättning uppgifter. Varje plugin innehåller internt en uppgiftskatalog med JavaScript-filer som har samma syntax som en Gruntfil. De flesta av Grunt-plugins publiceras med nyckelordet gruntplugin
i npm och prefixet med grunt
. Detta hjälper Grunt att visa alla plugins i Grunts plugin-lista . De plugins som officiellt stöds av Grunt är prefixerade med grunt-contrib
och är också markerade med en stjärnsymbol i pluginlistan. Några populära plugins inkluderar grunt-contrib-watch , grunt-contrib-clean , grunt-contrib-uglify .
Utvecklare kan till och med skapa sina egna Grunt-plugins genom att använda insticksprogrammet grunt-init
och publicera dem till npm med kommandot npm publish .
Fördelar
Följande är några av fördelarna med att använda Grunt:
- Alla uppdragslöpare har följande egenskaper: konsekvens, effektivitet, effektivitet, repeterbarhet, etc.
- Tillgång till många fördefinierade plugins som kan användas för att arbeta med JavaScript-uppgifter och statiskt innehåll.
- Tillåter användare att anpassa uppgifter med fördefinierade plugins.
- Föredrar konfigurationsmetoden för kodning.
- Tillåter användare att lägga till sina egna plugins och publicera dem på npm .
Jämförelse
Myra
Ant eller Apache Ant är ett Java -baserat byggverktyg . Ant har lite över hundra inbyggda uppgifter som är bättre lämpade för projekt med en Java-byggstruktur. Att skriva anpassad kod i Ant kräver att användarna skriver en JAR- fil och refererar till den från XML . Detta skulle lägga onödig komplexitet till projekt som inte kräver Java själva. Ant build-konfigurationer listas i XML snarare än i JSON- format.
Räfsa
Rake låter utvecklare definiera uppgifter i Ruby . Rake har inte konceptet med plugins eller fördefinierade uppgifter, vilket innebär att alla nödvändiga åtgärder måste skrivas och sedan köras. Detta gör utvecklingen kostsam jämfört med Grunt som har en stor uppsättning återanvändbara plugins.
Klunk
Gulp.js är ett JavaScript-baserat task runner-verktyg som liknar Grunt eftersom båda följer en modulbaserad arkitektur och är baserade på npm . Gulp-uppgifter definieras av kod snarare än konfiguration. Gulp är snabbare än Grunt. Grunt använder temporära filer för att överföra utdata från en uppgift till en annan medan i Gulp-filer skickas mellan uppgifterna.
Se även
- Node.js
- Npm
- Bygg automation
- Lista över programvara för byggautomation
- Apache Maven
- Räfsa
- Yeoman (dator)
- Modernizr
- JavaScript-ramverk
- JavaScript-bibliotek
Vidare läsning
- Cryer, James (2015). Pro Grunt.js . Apress. ISBN 978-1-4842-0013-1 .
- Pillora, Jamie (2014). Komma igång med Grunt: The JavaScript Task Runner . Packt Publishing Ltd. ISBN 978-1-78398-062-8 .