Webpack vs Gulp vs Grunt

Von Stephen Afam-Osemene

Einführung

Mit der zunehmenden Komplexität von Javascript-Projekten und der Notwendigkeit, Aufgaben zu automatisieren, die Leistung von Anwendungen zu verfolgen und einige Wartungsaktivitäten durchzuführen, ist es sehr wichtig geworden, zu entscheiden, welche Art von Build-Tool man einsetzen sollte. Dies war nicht sehr notwendig, weil Javascript nicht besonders kompiliert werden müssen; jedoch mit Projekten wie Single-Page-Anwendungen, und das Aufkommen von Build-Tools, Aufgaben, die wieder auftreten, sind jetzt automatisiert.Sehen, dass es mehr als eine Notwendigkeit, Build-Tools zu verwenden, Software-Entwickler in dieser Zeit sind mit der Herausforderung der Auswahl eines, die perfekt für ihr Projekt konfrontiert.

In diesem Artikel werden wir Grunt, Gulp und Webpack in Bezug auf die folgenden Eigenschaften vergleichen:

  • Benutzerfreundlichkeit
  • Popularität
  • Zuverlässigkeit
  • Erweiterbarkeit

Grunt und Gulp sind Task-Runner, während Webpack ein Modul-Bundler ist. Task-Runner werden grundsätzlich verwendet, um Aufgaben in einem Entwicklungsprozess zu automatisieren. Einige dieser Aufgaben umfassen die Komprimierung von JS-Dateien, die Kompilierung von Sass-Dateien, die Überwachung von Dateiänderungen, die Minifizierung von Dateien und die automatische Voranpassung.Modul-Bundler nehmen mehrere Module der Anwendung, die jeweils Abhängigkeiten haben, und bündeln sie zu statischen Assets. Am Ende des Artikels wird hoffentlich klarer, welches Build-Tool Sie für Ihr Projekt verwenden sollten.

Benutzerfreundlichkeit

Je komplexer ein Tool ist, desto schwieriger ist es, es zu verwenden. Als Task-Runner bieten Gulp und Grunt Funktionen wie Code-Minifizierung, CSS-Vorverarbeitung, Unit-Tests und eine Reihe anderer.

Im Vergleich zu Grunt oder Webpack ist Gulp viel einfacher zu bedienen. Es ist möglich, ein Projekt mit Gulp in ein paar Minuten zu starten. Grunt ist jedoch weniger konfigurationsaufwändig als Webpack.

Um Gulp einzurichten, werden folgende Schritte durchgeführt

  • Überprüfen Sie, ob node, npm und npx installiert sind
  • Installieren Sie Gulp CLI mit npm install --global gulp-cli
  • Erstellen Sie eine package.json-Datei für devDependencies
  • Installieren Sie das Gulp-Paket in die devDependencies mit npm install --save-dev gulp@next
  • Erstellen Sie eine gulp.js-Datei, in die die Aufgaben geschrieben werdenfunction defaultTask(cb) { // Platzieren Sie hier den Code für Ihre Standardaufgabe cb();}exports.default = defaultTask

Um Grunt zu verwenden, muss man folgendes tun:

  • Update dein npm mit npm update -g npm
  • Installiere Grunt CLI mit npm install -g grunt-cli
  • Richte deine package.json-Datei, in der Ihre devDependencies aufgelistet sind
  • Erstellen Sie eine Gruntfile.js-Datei, in die die Aufgaben geschrieben werden. Die Aufgaben werden immer innerhalb dieses Blocks geschrieben:module.exports = function(grunt) { // Grunt tasks go here};

Die Prozesse zur Einrichtung von Gulp und Grunt sehen ähnlich aus. Allerdings ist Gulp ausdrucksstärker; es erlaubt Ihnen, Code zu schreiben, der seine Funktion klar angibt. Gulp basiert auf Node-Streams und ermöglicht das Pipelining. Grunt hingegen stützt sich auf Datenkonfigurationsdateien, bei denen jede Quell- und Zieldatei deklariert werden muss. Wenn das Projekt größer wird, wird Grunt noch umständlicher zu verwalten.

Wenn man zum Beispiel Sass kompilieren, die daraus resultierende CSS-Datei minifizieren und die JS-Datei mit Grunt uglifizieren muss, sieht die Gruntfile.js-Datei so aus

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', );};

Wenn der gleiche Prozess mit Gulp durchgeführt werden soll, sieht die gulp.js hingegen so aus:

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 und Grunt sind beide einfacher einzurichten als Webpack.

Um Webpack zu verwenden, müssen Sie Folgendes tun:

  • Installiere Nodejs und Npm
  • In deinem Terminal, Erstellen Sie einen Webpack-Ordner mit mkdir folder-name
  • Intialisieren Sie das Nodejs-Projekt mit npm init -y
  • Erstellen Sie die folgenden Dateien touch index.html webpack.config.js index.js
  • Installieren Sie Webpack und Webpack Dev Server mit npm i --save-dev webpack@latest webpack-dev-server@latest
  • Installieren Sie Webpack global npm i -g webpack@latest
  • Schreiben Sie die Konfiguration von Webpack in die Datei webpack.config.js.

    const webpack = require(‚webpack‘);

    let config = { entry: ‚./index.js‘, output: { filename: ‚output.js‘ }}module.exports = config;

Das obige Setup ist der grundlegende Start für Webpack. Webpack hat verschiedene nützliche Funktionen und kann noch viel mehr. Die Fülle der Möglichkeiten, die sich mit Webpack eröffnen, rechtfertigt vielleicht seine Komplexität. Es braucht mehr Zeit, um zu verstehen, wie Webpack funktioniert; es kann auch mühsam werden, wenn man mehrere Konfigurationen für mehrere Umgebungen verwaltet.

Beliebtheit

Die Metriken zur Messung der Beliebtheit jedes dieser Tools sind unterschiedlich. Grunt gibt es schon lange vor Gulp, und viele Entwickler haben es ausgiebig genutzt. Laut der Umfrage „State of JavaScript 2018“ rangiert Webpack jedoch vor Gulp und Grunt.

Es besteht ein wachsendes Interesse daran, die Verwendung von Webpack zu erlernen; dies ist angesichts der vielfältigen Möglichkeiten, die durch seine Verwendung zur Verfügung stehen, gerechtfertigt.

Auch unter Verwendung von Github-Statistiken haben Webpack, Gulp und Grunt über 41.000, 30.000 bzw. 11.000 Sterne.

Zuverlässigkeit

Gulp, Grunt und Webpack haben eine große Abhängigkeit von Plugins. Alle drei Tools haben große Communities, in denen Probleme angesprochen und behoben werden können. Bei Gulp und Grunt besteht eine große Abhängigkeit vom Plugin-Autor, um die Plugins zu pflegen, und manchmal gibt es wenig oder keine Dokumentation, auf die man zurückgreifen kann, wenn ein Problem auftritt. Das Ergebnis ist in der Regel, dass man warten muss, bis diese Autoren Updates bereitstellen, oder dass man sich selbst darum kümmert, das Problem zu lösen. Die meisten Webpack-Plugins werden jedoch vom Webpack-Kernteam gewartet, während der Rest von der Webpack-Community verwaltet wird; das macht sie zuverlässiger.

Erweiterbarkeit

Gulp, Grunt und Webpack wurden in den letzten Jahren verbessert. Sie alle haben mehr Platz für neuere und noch effizientere und standardisierte Plugins.

Einige Grunt-Anwender beginnen, Gulp zu übernehmen, weil es Piping erlaubt, und das erklärt, warum es für Grunt bald ein Update geben soll, das auch Piping erlaubt. Piping erlaubt es Gulp-Benutzern, die Ausgabe eines Tasks an eine andere Abhängigkeit anzuhängen, wodurch der Code kürzer und schneller wird.

Zurzeit scheint Gulp erweiterbarer als Grunt zu sein, denn wenn das Projekt skaliert, ist es nicht so schwierig, die Gulp-Datei zu verwalten. Gulp verwendet Plugins, die jeweils eine einzelne Aufgabe erfüllen, im Gegensatz zu Grunt, wo ein Plugin mehrere Aufgaben erfüllen kann.

Webpack kann mit Hilfe von Plugins und Loadern auch über seine Kernfunktionalität hinaus erweitert werden, nur die Konfiguration kann kompliziert werden. Da Webpack jedoch alle Module bündelt, die Abhängigkeiten haben, ist es nicht so mühsam, selbst an großen Webpack-Projekten zu arbeiten.

Zum Zeitpunkt der Erstellung dieses Artikels hat Grunt 6.459 Plugins in seiner Plugin-Registry, während Gulp 3.672 Plugins in seiner eigenen Plugin-Registry gelistet hat. Webpack hat seine eigene Reihe offizieller Plugins, die hier aufgelistet sind, und eine Liste anderer Plugins von Drittanbietern, die unter awesome-webpack zu finden sind.

Fazit

Webpack ist eine ähnliche Kombination aus Gulp/Grunt und Browserify. Webpack ist in gewisser Weise notwendig für Projekte, die die Absicht haben, zu skalieren. Deshalb wird es oft mit React oder Angular verwendet.

Grunt und Gulp können verwendet werden, wenn das Projekt moderat oder ziemlich groß ist. Wenn Sie sich beim Schreiben von JS-Funktionen wirklich wohlfühlen, ist Gulp ratsam, aber wenn Sie lieber Aufgabenkonfigurationen schreiben, dann reicht Grunt aus.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.