Gulp.js: Difference between revisions

Content deleted Content added
Fix code formatting + update plugin count
It's a build tool; not a framework
 
(25 intermediate revisions by 20 users not shown)
Line 1:
{{Short description|Server-side JavaScript build tool}}
{{lowercase title}}
{{multiple issues|
{{How -to|date=October 2016}}
{{context|date=January 2017}}
}}
{{Infobox Softwaresoftware
| logoname = Gulp.js Logo.svg = gulp
| logo size = 100pxGulp.js Logo.svg
| developerlogo caption = Eric Schoffstall =
| logo alt =
| latest release version = 4.0.0
| logo size = 100px
| latest_release_date = {{Start date and age|2017|12|31|df=yes}}<ref name="previous-releases">{{cite web | url=https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md | accessdate=2018-01-11 | title=gulp changelog}}</ref>
| collapsible =
| language = [[JavaScript]]
| screenshot = <!-- Image name is enough -->
| genre = [[Toolkit]]
| platformscreenshot size = [[Cross-platform]]
| screenshot alt =
| license = [[MIT License]]<ref>{{cite web|url=https://github.com/gulpjs/gulp/blob/master/LICENSE|title=License to github.com | language=en | accessdate = 2016-05-30}}</ref>
| caption =
|name=gulp}}
| other_names =
'''gulp'''| author is an [[Open-source software|open-source]] [[JavaScript]] toolkit created by = Eric Schoffstall<ref name=":0">{{Cite book|title=Developing a Gulp Edge|publisher=Bleeding Edge Press|year=2014|isbn=978-1-939902-14-6|edition=1st|___location=|pages=|via=|author1=Jed Mao |author2=Maximilian Schmitt |author3=Tomasz Stryjewski |author4=Cary Country Holt |author5=William Lubelski }}</ref> used as a streaming [[build system]] in [[front-end web development]].
| developer = Blaine Bublitz, Eric Schoffstall
| released = {{Start date and age|2013|09|26|df=yes}}<ref>{{cite web | url=https://libraries.io/npm/gulp/versions | access-date=2020-12-31 | title=Release Date of Version 1.0.0}}</ref><!-- As per template guideline, this is the release date of version 1.0.0 -->
| ver layout =
| discontinued =
| latest release version = 45.0.0
| latest_release_date = {{Start date and age|20172024|1203|3129|df=yes}}<ref name="previouslatest-releases">{{cite web | url=https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md releases | accessdateaccess-date=20182020-0112-1131 | title=Releases · gulpjs/gulp| website=[[GitHub]] changelog}}</ref>
| latest preview version =
| latest preview date =
| repo = {{URL|https://github.com/gulpjs/gulp}}
| qid =
| programming language = [[JavaScript]] <!-- Node.js is NOT a language, it is a platform -->
| middleware =
| tools =
| engine =
| operating system = [[Linux]], [[macOS]], [[Windows]] <!-- As per template guideline, do not write "Cross-platform" here -->
| platform = [[Node.js]] <!-- As per template guideline, do not write "Cross-platform" here -->
| included with =
| replaces =
| replaced_by =
| service_name =
| size =
| standard =
| language =
| language count =
| language footnote =
| genre = [[Toolkit]]
| license = [[MIT License]]<ref>{{cite web | url=https://github.com/gulpjs/gulp/blob/master/LICENSE | title=LicenseLICENSE tofile github.comon GitHub | languagewebsite=en[[GitHub]] | accessdateaccess-date=2020-12-31}}</ref><ref>{{cite web | url=https://www.npmjs.com/package/gulp 2016| title=License field from gulp - npm | access-date=2020-0512-3031}}</ref>
| website =
| AsOf =
}}
 
'''gulp''' is an [[Open-source software|open-source]] [[JavaScript]] toolkit, used as a streaming [[build system]] (similar to a more package-focused [[Make (software)|Make]]) in [[front-end web development]].
 
It is a task runner built on [[Node.js]] and [[npm (software)|npm]], used for automation of time-consuming and repetitive tasks involved in web development like [[Minification (programming)|minification]], concatenation, cache busting, [[unit testing]], [[Linting software|linting]], optimization, etc.<ref>{{cite web|url=https://www.smashingmagazine.com/2014/06/building-with-gulp/ |title=Building With Gulp – Smashing Magazine |website=Smashingmagazine.com |date=11 June 2014 |accessdateaccess-date=2016-12-14}}</ref>
 
gulp uses a code-over-configuration approach to define its tasks and relies on its small, single-purpose plugins to carry them out. The gulp ecosystem includes more than 3500 such plugins.<ref>{{cite web|url=https://gulpjs.com/plugins/ |title=gulp.js plugin registry |website=Gulpjs.com |access-date= |accessdate=2016-12-14}}</ref>
 
== Overview ==
gulp<ref>{{cite web|url=https://github.com/gulpjs/gulp/blob/master/docs/FAQ.md|title=gulpjs/gulp|website=GitHub|access-date=2016-09-22}}</ref> is a build tool in JavaScript built on [[node stream]]s. These streams facilitate the connection of file operations through [[Pipeline (software)|pipelines]].<ref name="github.com">{{cite web|url=https://github.com/substack/stream-handbook |title=substack/stream-handbook: how to write node programs with streams |publisher=GitHub |access-date= |accessdate=2016-12-14}}</ref> gulp reads the file system and pipes the data at hand from one single-purposed plugin to another through the <code>.pipe()</code> 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.<ref>{{cite web|url=https://github.com/gulpjs/gulp/blob/master/docs/writing-a-plugin/README.md|title=gulpjs/gulp|website=GitHub|access-date=2016-09-22}}</ref> 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]], [[Software deployment|deploying]], creating notifications, unit testing, linting, etc.<ref name=":0" />
 
== Need for a task runner ==
Task-runners like gulp and [[Grunt (software)|Grunt]] are built on Node.js rather than [[Node Package Manager|npm]], because the basic npm scripts are inefficient when executing multiple tasks.
Even though some developers prefer [[Node Package Manager|npm]] scripts because they can 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.<ref name="gulpjs/gulp">{{cite web|url=https://github.com/gulpjs/gulp/blob/master/docs/CLI.md|title=gulpjs/gulp|website=GitHub|access-date=2016-09-23}}</ref> Grunt runs tasks by transforming files and saves them 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 the creation of many temporary files. Whereas gulp streams through the file system and doesdo not require any of these temporary locations, decreasing the number of I/O calls thus, improving performance.<ref>{{cite web|url=https://css-tricks.com/gulp-for-beginners/ |title=Gulp for Beginners |publisher=CSS-Tricks |date=2015-09-01 |accessdateaccess-date=2016-12-14}}</ref> 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’splugin's output. In gulp, the plugins are automatically pipe-lined.<ref name="github.com"/>
 
== Operation ==
The gulp tasks are run from a [[command-line interface]] (CLI)<ref name="gulpjs/gulp"/> shell and require two files, <code>package.json</code>, which is used to list the various plugins for gulp, and <code>gulpfile.js</code> (or simply <code>gulpfile</code>), These, as per build tool convention, are often found in the project root directory of the package's source code. The gulpfile iscontains wheremost pluginsof arethe loadedlogic andthat tasksgulp areneeds definedto run its build tasks. First, all the necessary modules are loaded and then tasks are defined in the gulpfile. All the necessary plugins specified in the gulpfile are installedlisted intoin the devDependencies section of <code>package.json</code>.<ref name=":2">{{cite web|url=https://docs.npmjs.com/cli/install|title=install {{!}} npm Documentation|website=docs.npmjs.com|access-date=2016-09-22}}</ref> The default task runs by <code>$gulp</code>. Individual tasks can be defined by gulp.task and are run by <code>gulp <task> <othertask></code>.<ref name=":1">{{cite web|url=https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md|title=gulpjs/gulp|website=GitHub|access-date=2016-09-23}}</ref> Complex tasks are defined by chaining the plugins with the help of <code>.pipe()</code> operator.<ref name=":3" />
 
== Anatomy of gulpfile ==
Line 43 ⟶ 77:
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.<ref>{{cite web|url=https://github.com/gulpjs/gulp/blob/4.0/docs/API.md |title=gulp/API.md at 4.0 · gulpjs/gulp · GitHub |publisher=GitHub |date=2016-05-12 |accessdateaccess-date=2016-12-14}}</ref> <syntaxhighlight lang="javascript">
gulp.task('taskName', function () {
//do something
Line 76 ⟶ 110:
</syntaxhighlight>
 
The subsequent image task optimizes images. <Code>gulp.src()</code> retrieves all the images with the extension .png, .gif or .jpg in the directory '' 'images-orig/'.''
 
<Code>.pipe(imagemin())</Code> channels the images found, through the optimization process and with <code>.pipe(gulp.dest())</code> the optimized images are saved to the '' 'images/' folder''. Without <code>gulp.dest()</code> the images would indeed be optimized, but are not stored.<ref>{{cite web |url=http://magazin.phlow.de/webdesign/gulp/ |title=Durchstarten mit Gulp.js – Websites optimieren, Arbeitsabläufe automatisieren |website=Magazin.phlow.de |date=2014-05-25 |accessdateaccess-date=2016-12-14 |archive-date=2017-06-16 |archive-url=https://web.archive.org/web/20170616233539/http://magazin.phlow.de/webdesign/gulp/ |url-status=dead }}</ref> Since the optimized images are stored to another folder, the original images remain unaltered.<ref name=":3">{{Cite book|title=Getting Started with Gulp|last=Maynard|first=Travis|publisher=Packt Publishing Ltd|year=2015|isbn=9781784393472|___location=|pages=|via=}}</ref><syntaxhighlight lang="javascript">
// Images task
gulp.task('images', function () {
Line 89 ⟶ 123:
 
=== Scripts Task ===
In the following example, all JavaScript files from the directory '' 'scripts/' '' are optimized with <code>.pipe(uglify())</code> and <code>gulp.dest('scripts/')</code> overwrites the original files with the output.<ref>{{cite web|url=https://liechtenecker.at/front-end-workflow-mit-gulp/ |title=Front-end Workflow mit Gulp - Liechtenecker |website=Liechtenecker.at |date=2015-05-29 |accessdateaccess-date=2016-12-14}}</ref> For this, one must first return to the required '' gulp-uglify plugin ''<ref>{{cite web|url=https://www.npmjs.com/package/gulp-uglify |title=gulp-uglify |website=Npmjs.com |access-date= |accessdate=2016-12-14}}</ref> on '' npm '' package installer and at the beginning of ''gulpfile'', the module should be defined. <syntaxhighlight lang="javascript">
// Script task
gulp.task('scripts', function () {
Line 99 ⟶ 133:
 
=== 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.<ref>{{cite web|url=https://www.npmjs.com/package/gulp-watch|title=gulp-watch|website=Npmjs.com|access-date=2016-09-23}}</ref> <syntaxhighlight lang="javascript">
// Rerun the task When a file changes
gulp.task('watch', function (cb) {
Line 109 ⟶ 143:
</syntaxhighlight>
 
Furthermore, it is possible to accomplish an update of the browser content using the Watch-tasks.<ref>{{cite web|url=https://www.browsersync.io/docs/gulp/ |title=Browsersync + Gulp.js |website=Browsersync.io |access-date= |accessdate=2016-12-14}}</ref> For this, there are numerous options and plugins.
 
==See also==
* [[Grunt (software)]]
* [[Browserify]]
 
==References==
Line 115 ⟶ 153:
 
==Literature==
*{{Cite book|title=Developing a Gulp Edge|publisher=Bleeding Edge Press|year=2014|isbn=978-1-939902-14-6|edition=1st|___location=|pages=|via=|author1=Jed Mao |author2=Maximilian Schmitt |author3=Tomasz Stryjewski |author4=Cary Country Holt |author5=William Lubelski }}
*{{Cite book| author=Den Odell | title=Pro JavaScript Development Coding, Capabilities, and Tooling | publisher=Apress |year=2014 |chapter=Build Tools and Automation |isbn=978-1-4302-6268-8}}
*{{Cite book|title=Getting Started with Gulp|last=Maynard|first=Travis|publisher=Packt Publishing Ltd|year=2015|isbn=9781784393472|___location=|pages=|via=}}
 
== External links ==