Introducere
Cu complexitatea crescândă a proiectelor Javascript și necesitatea de a automatiza sarcinile, de a urmări performanțele aplicațiilor și de a executa unele activități de întreținere, a devenit foarte important să se decidă ce tip de instrument de construcție să se adopte.Înainte ca instrumentele de construcție să devină o necesitate, nu era clar cum să se gestioneze sarcinile de rutină. Acest lucru nu era foarte necesar, deoarece Javascript nu trebuia compilat în mod special; cu toate acestea, cu proiecte precum aplicațiile de o singură pagină și apariția instrumentelor de compilare, sarcinile care se repetă sunt acum automatizate.Văzând că a devenit mai mult decât o necesitate de a utiliza instrumente de compilare, dezvoltatorii de software din prezent se confruntă cu provocarea de a alege unul care să fie perfect pentru proiectul lor.
În acest articol, vom compara Grunt, Gulp și Webpack în raport cu următoarele caracteristici:
- Facilitate de utilizare
- Popularitate
- Fiabilitate
- Extensibilitate
Grunt și Gulp sunt task runners, în timp ce Webpack este un bundler de module. Task runner-urile sunt utilizate, în principiu, pentru a automatiza sarcinile într-un proces de dezvoltare. Unele dintre aceste sarcini includ comprimarea fișierelor JS, compilarea fișierelor Sass, urmărirea modificărilor de fișiere, minificarea fișierelor și prefixarea automată.Module bundlers iau mai multe module ale aplicației care au fiecare dependențe și le grupează în active statice. Module bundlers îndeplinesc sarcina task runner-ilor și merg cu câțiva pași mai departe.Sperăm că la sfârșitul articolului va fi mai clar ce instrument de construcție să folosiți pentru proiectul dumneavoastră.
Facilitate de utilizare
Cu cât un instrument este mai complex, cu atât este mai dificil de utilizat. Fiind task runners, Gulp și Grunt oferă caracteristici precum minificarea codului, preprocesarea CSS, testarea unitară și o listă de altele.
În comparație cu Grunt sau Webpack, Gulp este mult mai ușor de utilizat. Este posibil să porniți un proiect folosind Gulp în câteva minute. Cu toate acestea, Grunt are mai puține bătăi de cap cu configurarea decât Webpack.
Pentru a configura Gulp, se parcurg următorii pași
- Verificați că node, npm și npx sunt instalate
- Instalați Gulp CLI folosind
npm install --global gulp-cli
- Crearea unui pachet.json pentru devDependencies
- Instalează pachetul gulp în devDependencies folosind
npm install --save-dev gulp@next
- Creează un fișier gulp.js în care vor fi scrise task-urilefunction defaultTask(cb) { // plasează aici codul pentru task-ul tău implicit cb();}exports.default = defaultTask
Pentru a folosi Grunt, trebuie să faceți următoarele:
- Actualizați npm-ul folosind
npm update -g npm
- Instalați Grunt CLI folosind npm install -g grunt-cli
- Configurați pachetul dvs.json în care sunt listate devDependencies
- Creați un fișier Gruntfile.js în care sunt scrise sarcinile. Sarcinile sunt întotdeauna scrise în cadrul acestui bloc:module.exports = function(grunt) { // Sarcinile Grunt merg aici};
Procesele pentru configurarea Gulp și Grunt sunt similare. Cu toate acestea, Gulp este mai expresiv; vă permite să scrieți cod care își precizează clar funcția. Gulp se bazează pe fluxurile Node, permițând pipelining. Grunt, pe de altă parte, se bazează pe fișiere de configurare a datelor, unde fiecare fișier sursă și destinație trebuie să fie declarat. Pe măsură ce proiectul devine mai mare, Grunt devine și mai greu de gestionat.
Dacă, de exemplu, trebuie să compilați Sass, să minificați fișierul CSS rezultat și să Uglify fișierul JS folosind Grunt, fișierul Gruntfile.js
va arăta astfel
module.exports = function (grunt) { grunt.initConfig({ sass: { dist: { files: { 'dist-grunt/css/style.css': 'assets/scss/style.scss' } } }, cssmin: { dist: { files: { 'dist-grunt/css/styles.min.css': } } }, uglify: { dist: { files: { 'dist-grunt/js/scripts.min.js': } } }, grunt.loadNpmTasks('grunt-sass'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.registerTask('default', );};
Pe de altă parte, dacă același proces trebuie realizat cu Gulp, gulp.js
va arăta astfel:
var gulp = require('gulp');var sass = require('gulp-sass');var cleanCSS = require('gulp-clean-css');var uglify = require('gulp-uglify');gulp.task('sass', function () { return gulp.src('assets/scss/**/*.scss') .pipe(sass().on('error', sass.logError)) .pipe(gulp.dest('dist-gulp/css'));});gulp.task('css', , function () { return gulp.src() .pipe(cleanCSS()) .pipe(gulp.dest('dist-gulp/css'));});gulp.task('default', );
Gulp și Grunt sunt ambele mai ușor de configurat în comparație cu Webpack.
Pentru a utiliza Webpack, trebuie să faceți următoarele:
- Instalați Nodejs și Npm
- În terminalul dumneavoastră, creați un folder Webpack folosind
mkdir folder-name
- Inițializați proiectul Nodejs folosind
npm init -y
- Creați următoarele fișiere
touch index.html webpack.config.js index.js
- Instalați Webpack și serverul Webpack dev folosind
npm i
--
save-dev webpack@latest webpack-dev-server@latest
- Instalați Webpack la nivel global
npm i -g webpack@latest
-
Scrieți configurația Webpack în fișierul
webpack.config.js
.const webpack = require(‘webpack’);
let config = { entry: ‘./index.js’, output: { filename: ‘output.js’ }}module.exports = config;
Configurarea de mai sus reprezintă startul de bază pentru Webpack. Webpack are diverse caracteristici utile și poate face mult mai mult. Pleiada de posibilități descoperite cu Webpack ar putea justifica complexitatea sa. Este nevoie de mai mult timp pentru a înțelege cum funcționează Webpack; de asemenea, poate deveni greoi atunci când se gestionează mai multe configurații pentru mai multe medii.
Popularitate
Metricele de măsurare a popularității fiecăruia dintre aceste instrumente diferă. Grunt a existat cu mult timp înainte de Gulp și mulți dezvoltatori l-au folosit pe scară largă. Cu toate acestea, conform sondajului State of JavaScript 2018, Webpack se situează mai sus decât Gulp și Grunt.
Există un interes tot mai mare pentru a învăța să utilizeze Webpack; acest lucru este justificat având în vedere gama largă de posibilități puse la dispoziție prin utilizarea sa.
De asemenea, folosind statisticile Github, Webpack, Gulp și Grunt au peste 41.000, 30.000 și, respectiv, 11.000 de stele.
Fiabilitate
Gulp, Grunt și Webpack au o dependență mare de plugin-uri. Toate cele trei instrumente au comunități mari în care problemele ar putea fi abordate și rezolvate. Pentru Gulp și Grunt, există o mare dependență de autorul pluginului pentru a întreține pluginurile și, uneori, există puțină sau deloc documentație la care să se apeleze atunci când se confruntă cu o problemă. Rezultatul este, de obicei, să așteptați ca acești autori să facă actualizări sau să vă hotărâți să le rezolvați singuri. Cu toate acestea, majoritatea plugin-urilor Webpack sunt întreținute de echipa de bază a Webpack, în timp ce restul sunt gestionate de comunitatea Webpack; iar acest lucru le face mai fiabile.
Extensibilitate
Gulp, Grunt și Webpack au fost îmbunătățite în ultimii ani. Toate acestea au mai mult loc pentru plugin-uri noi și chiar mai eficiente și standardizate.
Câțiva utilizatori de Grunt încep să adopte Gulp pentru că permite piping, iar asta explică de ce se spune că Grunt va avea în curând o actualizare care va permite, de asemenea, piping. Piping-ul le permite utilizatorilor Gulp să atașeze ieșirea unei sarcini la o altă dependență, ceea ce face ca codul să fie mai scurt și să lucreze mai repede.
În prezent, Gulp pare mai extensibil decât Grunt, deoarece atunci când proiectul se extinde, nu este atât de dificil de gestionat fișierul Gulp. Gulp folosește plugin-uri care îndeplinesc fiecare o singură sarcină, spre deosebire de Grunt, unde un plugin poate îndeplini mai multe sarcini.
Webpack poate fi extins chiar și dincolo de funcționalitatea sa de bază cu ajutorul plugin-urilor și încărcătoarelor, singura problemă fiind complicațiile care pot apărea în timpul configurării acestuia. Cu toate acestea, deoarece Webpack grupează toate modulele care au dependențe, nu este atât de anevoios să lucrezi chiar și la proiecte Webpack mari.
La momentul redactării acestui articol, Grunt are 6.459 de plugin-uri în registrul său de plugin-uri, în timp ce Gulp are 3.672 de plugin-uri listate în propriul registru de plugin-uri. Cu atât de multe plugin-uri pentru ambele, este probabil să găsiți un plugin care să facă tot ceea ce aveți nevoie.Webpack are propriul set de plugin-uri oficiale listate aici, și o listă de alte plugin-uri de la terți care ar putea fi găsite la awesome-webpack.
Concluzie
Webpack este similar cu o combinație între Gulp/Grunt și Browserify. Webpack este oarecum necesar pentru proiectele care au intenții de scalare. Acesta este motivul pentru care este adesea folosit cu React sau Angular.
Grunt și Gulp ar putea fi folosite atunci când proiectul este moderat, sau destul de mare. Dacă vă simțiți cu adevărat confortabil să scrieți funcții JS, atunci Gulp este recomandabil, dar, dacă veți scrie mai degrabă configurații de sarcini, atunci Grunt va fi suficient.
.