Esittely
Koska Javascript-projektien monimutkaisuus on lisääntynyt ja on tarpeen automatisoida tehtäviä, seurata sovelluksen suorituskykyä ja suorittaa joitain ylläpitotehtäviä, on tullut erittäin tärkeää päättää, minkä tyyppinen rakentamistyökalu otetaan käyttöön.Ennen kuin rakentamistyökalut tulivat välttämättömyydeksi, jäi epäselväksi, miten rutiinitehtävät tulisi hoitaa. Tämä ei ollut kovin tarpeellista, koska Javascriptia ei tarvinnut erityisesti kääntää; kuitenkin yksisivuisten sovellusten kaltaisten projektien ja build-työkalujen tulon myötä toistuvat tehtävät automatisoidaan.Koska build-työkalujen käytöstä on tullut enemmän kuin välttämätöntä, ohjelmistokehittäjät joutuvat tällä hetkellä kohtaamaan haasteen valita sellainen, joka sopii täydellisesti heidän projektiinsa.
Tässä artikkelissa vertailemme Gruntia, Gulpia ja Webpackia seuraavien ominaisuuksien suhteen:
- Käytön helppous
- Suosio
- Luotettavuus
- Laajennettavuus
Grunt ja Gulp ovat tehtäväkehittäjiä, kun taas Webpack on moduuliniputtaja. Tehtäväjuoksijoita käytetään periaatteessa kehitysprosessin tehtävien automatisointiin. Joitakin näistä tehtävistä ovat JS-tiedostojen pakkaaminen, Sass-tiedostojen kääntäminen, tiedostomuutosten tarkkailu, tiedostojen pienentäminen ja automaattinen etuliite.Moduulien niputtajat ottavat useita sovelluksen moduuleja, joilla kullakin on riippuvuuksia, ja niputtavat ne staattisiksi asseteiksi. Module bundlerit suorittavat task runnereiden tehtävän ja menevät useita vaiheita pidemmälle.toivottavasti artikkelin lopussa on selkeämpää, mitä build-työkalua kannattaa käyttää omaan projektiin.
Käytön helppous
Mitä monimutkaisempi työkalu on, sitä vaikeampi sitä on käyttää. Tehtävien suorittajina Gulp ja Grunt tarjoavat ominaisuuksia, kuten koodin pienentämistä, CSS-esikäsittelyä, yksikkötestausta ja listan muita.
Gulp on Grunttiin tai Webpackiin verrattuna paljon helpompi käyttää. On mahdollista aloittaa projekti Gulpilla muutamassa minuutissa. Gruntissa on kuitenkin vähemmän konfigurointivaivaa kuin Webpackissa.
Gulpin käyttöönottamiseksi tehdään seuraavat vaiheet
- Tarkista, että node, npm ja npx on asennettu
- Asenna Gulp CLI:n avulla
npm install --global gulp-cli
- Luo paketti.json-tiedosto devDependenciesiin
- Asenna gulp-paketti devDependenciesiin käyttäen
npm install --save-dev gulp@next
- Luo gulp.js-tiedosto, johon tehtävät kirjoitetaanfunction defaultTask(cb) { // laita oletustehtäväsi koodi tähän cb();}exports.default = defaultTask
Käyttääksesi Gruntia sinun on tehtävä seuraavat asiat:
- Päivitä npm:si käyttämällä
npm update -g npm
- Asenna Grunt CLI käyttämällä npm install -g grunt-cli
- Asenna paketti.json-tiedoston, jossa devDependencies on listattu
- Luo Gruntfile.js-tiedosto, johon tehtävät kirjoitetaan. Tehtävät kirjoitetaan aina tämän lohkon sisään:module.exports = function(grunt) { // Grunt-tehtävät menevät tänne};
Gulpin ja Gruntin käyttöönottoprosessit näyttävät samanlaisilta. Gulp on kuitenkin ilmaisuvoimaisempi; sen avulla voit kirjoittaa koodia, joka kertoo selkeästi tehtävänsä. Gulp perustuu Node-virtoihin, mikä mahdollistaa putkituksen. Grunt taas luottaa tietojen konfigurointitiedostoihin, joissa jokainen lähde- ja kohdetiedosto on ilmoitettava. Kun projekti kasvaa suuremmaksi, Gruntin hallinnasta tulee entistä hankalampaa.
Jos esimerkiksi haluat kääntää Sassin, minifioida tuloksena syntyvän CSS-tiedoston ja uglifioida JS-tiedoston Gruntin avulla, Gruntfile.js
-tiedosto näyttää tältä
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', );};
Jos taas sama prosessi halutaan tehdä Gulpilla, gulp.js
-tiedosto näyttää tältä:
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 ja Grunt ovat kumpikin helpompia konfiguroida Webpackiin verrattuna.
Voidaksesi käyttää Webpackia, sinun täytyy tehdä seuraavat asiat:
- Asenna Nodejs ja Npm
- Terminaalissa, Luo Webpack-kansio käyttämällä
mkdir folder-name
- Alusta Nodejs-projekti käyttämällä
npm init -y
- Luo seuraavat tiedostot
touch index.html webpack.config.js index.js
- Asenna Webpack ja Webpack dev-palvelin käyttäen
npm i
--
save-dev webpack@latest webpack-dev-server@latest
- Asenna Webpack globaalisti
npm i -g webpack@latest
-
Kirjoita Webpackin konfiguraatio tiedostoon
webpack.config.js
.const webpack = require(’webpack’);
let config = { entry: ’./index.js’, output: { tiedostonimi: ’output.js’ }}module.exports = config;
Yllä oleva asetelma on Webpackin peruslähtökohta. Webpackissa on erilaisia hyödyllisiä ominaisuuksia ja sillä voi tehdä paljon muutakin. Webpackin paljastamien mahdollisuuksien paljous saattaa oikeuttaa sen monimutkaisuuden. Webpackin toimintatapojen ymmärtäminen vie enemmän aikaa; se voi myös käydä hankalaksi, kun hallitaan useita konfiguraatioita useisiin ympäristöihin.
Suosio
Kunkin työkalun suosion mittaamiseen käytettävät mittarit eroavat toisistaan. Grunt on ollut olemassa jo kauan ennen Gulpia, ja monet kehittäjät ovat käyttäneet sitä laajasti. State of JavaScript 2018 -tutkimuksen mukaan Webpack sijoittuu kuitenkin korkeammalle kuin Gulp ja Grunt.
Kiinnostus Webpackin käytön opetteluun on kasvussa; tämä on perusteltua, kun nähdään sen käytön mahdollistamat laajat mahdollisuudet.
Käyttäen myös Githubin tilastoja, Webpackilla, Gulpilla ja Gruntilla on vastaavasti yli 41 000, 30 000 ja 11 000 tähteä.
Luotettavuus
Gulpilla, Gruntilla ja Webpackilla on suuri riippuvuus lisäosista. Kaikilla kolmella työkalulla on suuret yhteisöt, joissa ongelmia voidaan käsitellä ja korjata. Gulpissa ja Gruntissa on suuri riippuvuus liitännäisten tekijästä liitännäisten ylläpidossa, ja joskus on vain vähän tai ei lainkaan dokumentaatiota, johon turvautua ongelman kohdatessa. Tuloksena on yleensä se, että on odotettava, että tekijät tekevät päivityksiä, tai korjattava ongelmat itse. Useimpia Webpack-liitännäisiä ylläpitää kuitenkin Webpackin ydintiimi, kun taas loput ovat Webpack-yhteisön hallinnoimia; ja tämä tekee niistä luotettavampia.
Laajennettavuus
Gulpia, Gruntia ja Webpackia on parannettu viime vuosina. Niissä kaikissa on enemmän tilaa uusille ja vielä tehokkaammille ja standardoiduille lisäosille.
Jotkut Gruntin käyttäjät ovat alkaneet ottaa Gulpia käyttöön, koska se mahdollistaa putkituksen, ja se selittää sen, miksi Gruntin sanotaan saavan pian päivityksen, joka mahdollistaa myös putkituksen. Pipingin avulla gulpin käyttäjät voivat liittää tehtävän tuotoksen toiseen riippuvuuteen, jolloin koodi lyhenee ja työskentely nopeutuu.
Tällä hetkellä Gulp vaikuttaa laajennettavammalta kuin Grunt, koska kun projekti skaalautuu, gulp-tiedoston hallinta ei ole niin vaikeaa. Gulp käyttää liitännäisiä, jotka kukin suorittavat yhden tehtävän toisin kuin Grunt, jossa yksi liitännäinen voi suorittaa useita tehtäviä.
Webpackia voidaan laajentaa jopa sen ydintoiminnallisuutta pidemmälle pluginien ja loadereiden avulla, ainoa ongelma on komplikaatiot, joita voi syntyä sen konfiguroinnissa. Koska Webpack kuitenkin niputtaa kaikki moduulit, joilla on riippuvuuksia, ei suurtenkaan Webpack-projektien työstäminen ole niin työlästä.
Tämän artikkelin kirjoittamishetkellä Gruntin plugin-rekisterissä on 6 459 pluginia, kun taas Gulpin omassa plugin-rekisterissä on 3 672 pluginia. Koska molempiin on niin paljon liitännäisiä, löydät todennäköisesti liitännäisen kaikkeen tarvitsemaasi.Webpackilla on omat viralliset liitännäisohjelmansa, jotka on lueteltu täällä, ja luettelo muista kolmannen osapuolen liitännäisistä, jotka löytyvät osoitteesta awesome-webpack.
Johtopäätös
Webpack on samanlainen kuin Gulp/Gruntin ja Browserifyn yhdistelmä. Webpack on jokseenkin välttämätön projekteille, joilla on aikomus skaalautua. Siksi sitä käytetään usein Reactin tai Angularin kanssa.
Gruntia ja Gulpia voisi käyttää, kun projekti on kohtalainen tai melko suuri. Jos olet todella mukava kirjoittamaan JS-funktioita, niin Gulp on suositeltava, mutta jos haluat mieluummin kirjoittaa tehtäväkonfiguraatioita, niin Grunt riittää.