Gulp.js

Gulp.js
Developer(s) Fractal and contributors of the GitHub community
Stable release
4.0.0
Platform Cross-platform, see Legacy browser support
Available in JavaScript
License MIT License[1]
Website gulpjs.com

gulp.js is an open-source, extensible, powerful and efficient JavaScript toolkit by Fractal Innovations[2] and the open source community at git, used as a streaming build system in front-end web development.

It is a task runner built on Node.js and Node Package Manager (npm), used for automation of time-consuming and repetitive tasks involved in web development like minification, concatenation, cache busting, unit testing, linting, image optimization etc.[3]

gulp uses a code-over-configuration approach to define its tasks and relies on its small, single-purposed plugins to carry them out. gulp ecosystem has 300+ such plugins made available to choose from.[4]

Overview

gulp[5] is a build tool in JavaScript built on node streams. These streams facilitate the connection of file operations through pipelines.[6] gulp reads the file system and pipes the data at hand from its one single-purposed plugin to other through the .pipe() operator, doing one task at a time. The original files are not affected until all the plugins are processed. It can be configured either to modify the original files or to create new ones. This grants the ability to perform complex tasks through linking its numerous plugins. The users can also write their own plugins to define their own tasks.[7] Unlike other task runners that run tasks by configuration, gulp requires knowledge of JavaScript and coding to define its tasks. gulp is a build system which means apart from running tasks, it is also capable of copying files from one location to another, compiling, deploying, creating notifications, unit testing, linting etc.[2]

Need for a task runner

The main reason why task-runners like gulp and grunt are built on node is because, the basic npm scripts are not efficient when it comes to executing multiple tasks. Even though a few developers prefer npm scripts to be simple and easy to implement, there are numerous ways where gulp and grunt seem to have an advantage over each other and the default provided scripts.[8] Grunt runs tasks by transforming files and saves as new ones in temporary folders and the output of one task is taken as input for another and so on until the output reaches the destination folder. This involves a lot of I/O calls and creation of many temporary files. Whereas gulp streams through the file system and does not require any of these temporary locations decreasing the number of I/O calls thus, improving performance.[9] Grunt uses configuration files to perform tasks whereas gulp requires its build file to be coded. In grunt, each plugin needs to be configured to match its input location to the previous plugin’s output. In gulp, the plugins are automatically pipe-lined.[6]

Operation

The gulp tasks are run from the Command Line Interface (CLI)[8] shell like Grunt and require package.json and gulpfile.js(simply gulpfile) in the project root directory. gulpfile is where all the plugins are loaded and the tasks are defined. First, all the necessary modules are loaded and then tasks are defined in the gulpfile. All the necessary plugins specified in the gulpfile are installed into the devDependencies.[10] The default task runs by $gulp. Individual tasks can be defined by gulp.task and are run by gulp <task> <othertask>.[11] Complex tasks are defined by chaining the plugins with the help of .pipe() operator.[12]

Anatomy of gulpfile

gulpfile is the place where all the operations are defined in gulp. The basic anatomy of the gulpfile consists of required plugins included at the top, definition of the tasks and a default task at the end.[13]

Plugins

Any installed plugin that is required to perform a task is to be added at the top of the gulpfile as a depedency in the following format.[11][12]

//Adding dependencies
var gulp = require ( 'gulp');
var gutil = require ( 'util-gulp');

Tasks

The tasks can then be created. A gulp task is defined by gulp.task and takes the name of the task as the first parameter and a function as the second parameter.

The following example shows the creation of a gulp tasks. The first parameter taskName is mandatory and specifies the name by which the task in the shell can be executed[14]

//Defining tasks
gulp.task ( 'taskName', function () {
//do something
});

Alternatively, a task that performs several predefined functions can be created. Those functions are passed as the second parameter in the form of an array.

function fn1 () {
// do something
}

function fn2 () {
// Do something else
}

// Task with array of function names
gulp.task ( 'taskName', ['fn1','fn2']);

Default task

The default task is to be defined at the end of the gulpfile. It can be run by gulp command in the shell. In the case below, the default task does nothing.[12]

// Gulp default task
gulp.task ( 'default', [ '']);

The default task is used in gulp to run any number of dependent sub tasks defined above in a sequential order automatically. gulp can also monitor source files and run an appropriate task when changes are made to the files. The sub tasks are to be mentioned as the elements of the array in the second parameter. The process can be triggered by simply running the default task by gulp command.[13]

Example tasks

Image Task

For the following example, the gulp-imagemin plugin is required. To install the plugin, run the command npm install --save-dev gulp-imagemin.[15]

Subsequently, the module must be at the beginning of gulpfile 'defined' as:

var imagemin = require ( 'gulp-imagemin');

The subsequent image task optimizes images. gulp.src () retrieves all the images with the extension .png, .gif or .jpg in the directory 'images-orig/'.

.pipe (imagemin ()) channels the images found, through the optimization process and with .pipe (gulp.dest ()) the optimized images are saved to the 'images/' folder. Without gulp.dest () the images would indeed be optimized, but are not stored.[16] Since the optimized images are stored to another folder, the original images remain unaltered.[12]

// Images task
gulp.task ( 'images', function () {
    gulp.src ( 'images-orig/*. {png, gif, jpg}')
        .pipe (imagemin ())
        .pipe (gulp.dest ( 'images/'));
});

Scripts Task

In the following example, all JavaScript files from the directory 'scripts/' are optimized with .pipe (uglify ()) and gulp. dest ( 'scripts/') overwrites the original files with the output.[17] For this, one must first return to the required gulp-uglify plugin [18] on npm package installer and at the beginning of gulpfile , the module should be defined.

//Script task
gulp.task ( 'scripts', function () {
    gulp.src ( 'scripts/*. js')
        .pipe (uglify ())
        .pipe (gulp.dest ( 'scripts/'));
});

Watch Task

The Watch-task serves to react to changes in files. In the following example, the tasks with the names scripts and images are called when any of JavaScript files or images change in the specified directories.[19]

// Rerun the task When a file changes
gulp.task ( 'watch', function () {
    gulp.watch ( '. scripts/js **', [ 'scripts']);
    gulp.watch ( 'images-orig/**', [ 'images']);
});

Furthermore, it is possible to accomplish an update of the browser content using the Watch-tasks.[20] For this, there are numerous options and plugins.

References

  1. github.com/gulpjs/gulp/blob/master/LICENSE
  2. 1 2 Jed Mao, Maximilian Schmitt, Tomasz Stryjewski, Cary Country Holt, William Lubelski (2014). Developing a Gulp Edge (1st ed.). Bleeding Edge Press. ISBN 978-1-939902-14-6.
  3. www.smashingmagazine.com/2014/06/building-with-gulp/
  4. gulpjs.com/plugins/
  5. "gulpjs/gulp". GitHub. Retrieved 2016-09-22.
  6. 1 2 github.com/substack/stream-handbook
  7. "gulpjs/gulp". GitHub. Retrieved 2016-09-22.
  8. 1 2 "gulpjs/gulp". GitHub. Retrieved 2016-09-23.
  9. css-tricks.com/gulp-for-beginners/
  10. "install | npm Documentation". docs.npmjs.com. Retrieved 2016-09-22.
  11. 1 2 "gulpjs/gulp". GitHub. Retrieved 2016-09-23.
  12. 1 2 3 4 Maynard, Travis (2015). Getting Started with Gulp. Packt Publishing Ltd. ISBN 9781784393472.
  13. 1 2 "An Introduction to Gulp.js - SitePoint". 2014-02-10. Retrieved 2016-09-23.
  14. github.com/gulpjs/gulp/blob/4.0/docs/API.md
  15. "gulp-imagemin". npm. Retrieved 2016-09-22.
  16. magazin.phlow.de/webdesign/gulp/
  17. liechtenecker.at/front-end-workflow-mit-gulp/
  18. www.npmjs.com/package/gulp-uglify%20gulp-uglify%20plugin
  19. "gulp-watch". npm. Retrieved 2016-09-23.
  20. www.browsersync.io/docs/gulp/

Literature

External links

This article is issued from Wikipedia - version of the 10/29/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.