Ismerkedés a Grunt-tal
Miért érdemes használni?
A kulcsszó az automatizálás. Számtalan kisebb-nagyobb feladat előfordul webfejlesztés közben, melyeket gyakran kell ismételnünk. Ezek a feladatok lehetnek CSS illteve JavaScript fájlok tisztítása, összenyomása, összefűzése, képek optimalizálása, ellenőrző eszközök futtatása, különböző előfordítók használata. A Grunt segítségével ezeket a feladatokat tudjuk könnyedén automatizálni.
Ahogy a felsorolt listából is látszódik, a Grunt nem csak a JavaScript fejlesztőknek, hanem a sitebuildereknek is hasznos segédeszköze lehet! Véleményem szerint JavaScript fejlesztők eszköztárából meg egyszerűen nem is hiányozhat ez a remek program!
Telepítés
Első lépésként a NodeJS-t kell feltelepíteni a gépünkre, amennyiben nem rendelkeznénk vele. Windows esetén ez rendkívül egyszerűen megoldható, látogass el a nodejs.org oldalra, majd kattints az Install gombra, a letöltött .msi fájlt indítsd el, és néhány kattintás után már készen is vagyunk. (A többi operációs rendszer esetén sem sokkal összetettebb a telepítés.)
A parancssorba adjuk ki a következő utasítást, megnézve, hogy lássuk valóban sikerült-e a telepítés?
node -v
Ezután a NodeJS csomagkezelőjére lesz szükségünk, ezzel telepítjük fel a Grunt-ot.
npm install -g grunt-cli
Ellenőrzésképpen most is nézzük meg, hogy valóban sikeres volt a telepítés?
grunt --version
Ha ezzel megvagyunk, akkor készítsünk egy teszt projektet, ahol megismerkedünk a Grunt-tal és néhány Grunt modullal.
Kiegészítő modulok telepítése: package.json
Először létre kell hozni a projekt mappájában egy package.json
nevű fájlt, amelyben megadjuk, hogy a npm még milyen csomagokat telepítsen.
{
"name": "MyProject",
"version": "0.0.0",
"author": "Gabor Turi",
"devDependencies": {
"grunt": "~0.4.2",
"grunt-contrib-jshint": "*",
"grunt-contrib-uglify": "*",
"grunt-contrib-sass": "*",
"grunt-contrib-watch": "*"
}
}
A devDependencies
-ben találhatóak a függőségek felsorolása, azaz azok a modulok, amelyekre szükségünk lesz majd. Megadhatjuk, hogy mely verzióra van szükségünk, de *
-gal jelezhetjük, ha a legújabb verziót szeretnénk használni. A ~
jelentése, hogy az adott verzióra van szükségünk vagy annál újabbra, amely legfeljebb a harmadik számban tér el. (Ekkor, ha a szemantikus verziózás szabályait a modul készítői betartották, akkor csak lefelé kompatibilis változásokkal egészítették ki a programot.)
Mentsük el a fájlt, majd indítsuk el a telepítést. Az adott mappában adjuk ki a következő utasítást.
npm install
Ez eltarthat egy ideig, ekkor az összes szükséges program letöltésre és telepítésre kerül.
Feladatok létrehozása: Gruntfile.js
Következő lépésben elkészítjük a Gruntfile.js
nevű fájlunkat, amelyben megadjuk, hogy milyen feladatokat szeretnénk elvégeztetni a Grunt-tal. Ezt a fájlt is ugyanúgy a projekt mappájában kell létrehozni.
var grunt = require('grunt');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.initConfig({
jshint: {
files: ['js/*.js'],
options: {
ignores: ['js/*.min.js']
}
},
uglify: {
my_target: {
files: {
'js/site.min.js': ['js/site.js']
}
}
}
});
grunt.registerTask('default', ['jshint', 'uglify']);
Az első utasítással létrehozzuk a grunt változót, majd a következő kettővel betöltjük a két megadott modult, a negyedik utasítással beállítjuk a konkrét feladatokat. Végül, az utolsó utasítással megadjuk, hogy az alapértelmezett feladat a megadott két feladat egymás utáni végrehajtása legyen. Későbbiekben a modulok betöltését másként fogjuk megvalósítani, de első körben tisztább ez a megoldás.
Két taszkot adtunk meg, az első a remélem sokak által ismert és használt JSHint, amivel különféle ellenőrzéseket tudunk futatni a JavaScript kódon, míg a második segítségével a JavaScript fájlokat tudjuk összenyomni a megadott új fájlban. Sajnos azt látni kell, hogy a két modulnál különböző a paraméterezés. Elsőre ez talán zavaró lehet, ám hamar meg lehet szokni.
Készítsünk el egy tetszőleges js/site.js
fájlt, hogy legyen min végrehajtani a feladatokat!
Ezután ha beírjuk a konzolba a grunt
utasítást, akkor az alábbihoz hasonló eredményt kell kapnunk.
Ezután a site.js
fájl mellett megjelent a site.min.js
fájlunk.
Ennél részletesebb kimenetet kaphatunk a grunt --verbose
utasítás megadásával.
Ha csak az egyik feladatot akarjuk futtatni, akkor arra is van lehetőség. Például a grunt jshint
utasításra csak az ellenőrző feladat futna le.
Következő lépésben egészítsük ki a projektünket egy tetszőleges Sass fájllal is, majd módosítsuk a Gruntfile.js
-t a lentiek alapján.
// ...
grunt.loadNpmTasks('grunt-contrib-sass');
//...
grunt.initConfig({
// ...
sass: {
build: {
files: {
'stylesheets/style.css': 'sass/style.scss'
}
},
options: {
style: 'compressed'
}
}
// ...
grunt.registerTask('default', ['jshint', 'sass', 'uglify']);
A kiegészítő modulok telepítésekor mi csak egy Sass wrappert telepítettünk, ha a gépen nincs fent a Sass program, akkor hibaüzenetet kapunk. A következő linken található egy leírás a Sass telepítéséről és működéséről. Telepítés után már gond nélkül tudjuk futtatni ezt a feladatot is.
Amennyiben szeretnénk, hogy a Sass fájl módosításakor automatikusan lefusson az átalakítás, akkor a következő taszk hozzáadására lesz szükség.
// ...
grunt.loadNpmTasks('grunt-contrib-watch');
// ...
grunt.initConfig({
// ...
watch: {
css: {
files: 'sass/*.scss',
tasks: ['sass']
}
}
});
// ...
Most az alapértelmezett feladatlistát nem módosítottuk, így a sima grunt
utasítás esetén nem változik semmi, ám ha kiadjuk a grunt watch
utasítást, akkor a program folyamatosan figyelni fogja a megadott fájlok változását, változás esetén lefuttatja a megadott taszkot. Kilépni a Ctrl + C
-vel lehet.
A watch taszknak több beállítási lehetősége is van, megadható, hogy a böngésző automatikusan frissítsen, ha változás történik, ehhez először be kell állítani a livereload
paramétert igazra.
// ...
watch: {
css: {
files: 'sass/*.scss',
tasks: ['sass'],
options: {
livereload: true
}
}
}
// ...
Továbbá az oldal forráskódjához hozzá kell adni a következő kódot.
<script src="//localhost:35729/livereload.js"></script>
Ekkor változás esetén automatikusan frissül az oldal.
A leírásban megpróbáltam a legnépszerűbb modulok közül kiválasztani néhányat, ám érdemes átnézni a Grunt-hoz készült modulok listáját, több ezer plugint készítettek már hozzá. Mivel valóban egyszerűen lehet saját modult készíteni, így várhatóan ez a szám tovább fog növekedni.
Zárszó
Ezzel a cikkel egy rövid betekintést szerettem volna nyújtani ennek a kiváló programnak a hasznosságába. A Grunt egyik erőssége a hatalmas plugin készlete, a következő részekben majd néhánnyal részletesebben is megismerkedünk, illetve további praktikákról is lesz szó, amelyek kényelmesebbé, egyszerűbbé teszik az eszköz használatát.