A toolkit to automate & enhance your workflow

Related tags

Build Tools gulp
Overview

The streaming build system

NPM version Downloads Azure Pipelines Build Status Build Status AppVeyor Build Status Coveralls Status OpenCollective Backers OpenCollective Sponsors Gitter chat

What is gulp?

  • Automation - gulp is a toolkit that helps you automate painful or time-consuming tasks in your development workflow.
  • Platform-agnostic - Integrations are built into all major IDEs and people are using gulp with PHP, .NET, Node.js, Java, and other platforms.
  • Strong Ecosystem - Use npm modules to do anything you want + over 3000 curated plugins for streaming file transformations.
  • Simple - By providing only a minimal API surface, gulp is easy to learn and simple to use.

What's new in 4.0?!

  • The task system was rewritten from the ground-up, allowing task composition using series() and parallel() methods.
  • The watcher was updated, now using chokidar (no more need for gulp-watch!), with feature parity to our task system.
  • First-class support was added for incremental builds using lastRun().
  • A symlink() method was exposed to create symlinks instead of copying files.
  • Built-in support for sourcemaps was added - the gulp-sourcemaps plugin is no longer necessary!
  • Task registration of exported functions - using node or ES exports - is now recommended.
  • Custom registries were designed, allowing for shared tasks or augmented functionality.
  • Stream implementations were improved, allowing for better conditional and phased builds.

gulp for enterprise

Available as part of the Tidelift Subscription

The maintainers of gulp and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.

Installation

Follow our Quick Start guide.

Roadmap

Find out about all our work-in-progress and outstanding issues at https://github.com/orgs/gulpjs/projects.

Documentation

Check out the Getting Started guide and API docs on our website!

Excuse our dust! All other docs will be behind until we get everything updated. Please open an issue if something isn't working.

Sample gulpfile.js

This file will give you a taste of what gulp does.

var gulp = require('gulp');
var less = require('gulp-less');
var babel = require('gulp-babel');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var cleanCSS = require('gulp-clean-css');
var del = require('del');

var paths = {
  styles: {
    src: 'src/styles/**/*.less',
    dest: 'assets/styles/'
  },
  scripts: {
    src: 'src/scripts/**/*.js',
    dest: 'assets/scripts/'
  }
};

/* Not all tasks need to use streams, a gulpfile is just another node program
 * and you can use all packages available on npm, but it must return either a
 * Promise, a Stream or take a callback and call it
 */
function clean() {
  // You can use multiple globbing patterns as you would with `gulp.src`,
  // for example if you are using del 2.0 or above, return its promise
  return del([ 'assets' ]);
}

/*
 * Define our tasks using plain functions
 */
function styles() {
  return gulp.src(paths.styles.src)
    .pipe(less())
    .pipe(cleanCSS())
    // pass in options to the stream
    .pipe(rename({
      basename: 'main',
      suffix: '.min'
    }))
    .pipe(gulp.dest(paths.styles.dest));
}

function scripts() {
  return gulp.src(paths.scripts.src, { sourcemaps: true })
    .pipe(babel())
    .pipe(uglify())
    .pipe(concat('main.min.js'))
    .pipe(gulp.dest(paths.scripts.dest));
}

function watch() {
  gulp.watch(paths.scripts.src, scripts);
  gulp.watch(paths.styles.src, styles);
}

/*
 * Specify if tasks run in series or parallel using `gulp.series` and `gulp.parallel`
 */
var build = gulp.series(clean, gulp.parallel(styles, scripts));

/*
 * You can use CommonJS `exports` module notation to declare tasks
 */
exports.clean = clean;
exports.styles = styles;
exports.scripts = scripts;
exports.watch = watch;
exports.build = build;
/*
 * Define default task that can be called by just running `gulp` from cli
 */
exports.default = build;

Use latest JavaScript version in your gulpfile

Most new versions of node support most features that Babel provides, except the import/export syntax. When only that syntax is desired, rename to gulpfile.esm.js, install the esm module, and skip the Babel portion below.

Node already supports a lot of ES2015+ features, but to avoid compatibility problems we suggest to install Babel and rename your gulpfile.js to gulpfile.babel.js.

npm install --save-dev @babel/register @babel/core @babel/preset-env

Then create a .babelrc file with the preset configuration.

{
  "presets": [ "@babel/preset-env" ]
}

And here's the same sample from above written in ES2015+.

import gulp from 'gulp';
import less from 'gulp-less';
import babel from 'gulp-babel';
import concat from 'gulp-concat';
import uglify from 'gulp-uglify';
import rename from 'gulp-rename';
import cleanCSS from 'gulp-clean-css';
import del from 'del';

const paths = {
  styles: {
    src: 'src/styles/**/*.less',
    dest: 'assets/styles/'
  },
  scripts: {
    src: 'src/scripts/**/*.js',
    dest: 'assets/scripts/'
  }
};

/*
 * For small tasks you can export arrow functions
 */
export const clean = () => del([ 'assets' ]);

/*
 * You can also declare named functions and export them as tasks
 */
export function styles() {
  return gulp.src(paths.styles.src)
    .pipe(less())
    .pipe(cleanCSS())
    // pass in options to the stream
    .pipe(rename({
      basename: 'main',
      suffix: '.min'
    }))
    .pipe(gulp.dest(paths.styles.dest));
}

export function scripts() {
  return gulp.src(paths.scripts.src, { sourcemaps: true })
    .pipe(babel())
    .pipe(uglify())
    .pipe(concat('main.min.js'))
    .pipe(gulp.dest(paths.scripts.dest));
}

 /*
  * You could even use `export as` to rename exported tasks
  */
function watchFiles() {
  gulp.watch(paths.scripts.src, scripts);
  gulp.watch(paths.styles.src, styles);
}
export { watchFiles as watch };

const build = gulp.series(clean, gulp.parallel(styles, scripts));
/*
 * Export a default task
 */
export default build;

Incremental Builds

You can filter out unchanged files between runs of a task using the gulp.src function's since option and gulp.lastRun:

const paths = {
  ...
  images: {
    src: 'src/images/**/*.{jpg,jpeg,png}',
    dest: 'build/img/'
  }
}

function images() {
  return gulp.src(paths.images.src, {since: gulp.lastRun(images)})
    .pipe(imagemin())
    .pipe(gulp.dest(paths.images.dest));
}

function watch() {
  gulp.watch(paths.images.src, images);
}

Task run times are saved in memory and are lost when gulp exits. It will only save time during the watch task when running the images task for a second time.

Want to contribute?

Anyone can help make this project better - check out our Contributing guide!

Backers

Support us with a monthly donation and help us continue our activities.

Backers

Sponsors

Become a sponsor to get your logo on our README on Github.

Sponsors

Comments
  • Make a browserify recipe

    Make a browserify recipe

    Watchify is not needed, you can use browserify just fine.

    This is an example of me bundling a browserify project into a standalone file:

    var buffer = require('vinyl-buffer');
    var source = require('vinyl-source-stream');
    var browserify = require('browserify');
    var uglify = require('gulp-uglify');
    
    var bundler = browserify('./js/index.js');
    
    gulp.task('compile', function(){
      return bundler.bundle({standalone: 'noscope'})
        .pipe(source('noscope.js'))
        .pipe(buffer())
        .pipe(uglify())
        .pipe(gulp.dest('./dist'));
    });
    

    I think this could be a perfectly fine plugin as well:

    var uglify = require('gulp-uglify');
    var browserify = require('gulp-browserify');
    
    gulp.task('compile', function(){
      return browserify('./js/index.js', {standalone: 'noscope'})
        .pipe(uglify())
        .pipe(gulp.dest('./dist'));
    });
    
    documentation 
    opened by yocontra 114
  • Open call for plugins

    Open call for plugins

    Give ideas for plugins. If there is a grunt plugin include the link.

    I will try to get to as many as possible. I will also possibly put a bounty on it for somebody else to do it (or you can just do it anyways)

    question 
    opened by yocontra 91
  • [gulp 4] allow forward references to tasks

    [gulp 4] allow forward references to tasks

    Currently, forward references to tasks do not work in gulp 4 (and gulp 3, but I don't care about that):

    gulp.task('default', gulp.series('clean', 'build', 'watch', 'server'));
    
    gulp.task('clean', function () {
        // do something
    });
    ...
    

    This results in AssertionError: Task never defined: clean.

    From a stylistic standpoint, many people prefer to place the broadest tasks first and then define component tasks later, since this is how most people think and design code. Also the current 'bottom up', Forth-like restriction is no longer necessary considering how gulp 4 works.

    From a design standpoint, since tasks are interchangeable with functions now, and since functions (like most stuff in Javascript) can be referenced from anywhere within the current scope regardless of where it was declared, to be consistent tasks should work the same way.

    opened by alvint 77
  • Debouncing watcher tasks with Gulp 4

    Debouncing watcher tasks with Gulp 4

    With Chokidar there's no debounce option from what I've seen and instead it's up to the user of Chokidar to pass in a debounced function. So currently I do this:

    gulp.watch('**/*', _.debounce(compile, 200));
    

    Because lodash doesn't copy the provided function's name, my Gulp log says, "[03:06:06] Starting 'debounced'..." instead of "compile". The more serious issue is that the logs never say "Finished 'debounced'..." because the done callback that gulp.watch passed to the first invocation of the debounced function is ignored.

    So what I'm looking for is an easy and reliable way to debounce gulp.watch callbacks, possibly by adding debounce support to gulp.watch itself via the options arg.

    enhancement gulp4 
    opened by ide 75
  • Bring in new task system (bach)

    Bring in new task system (bach)

    • [x] Confirm 100% code coverage/test coverage on bach + child modules
    • [x] Switch task system to bach (+ registry layer)
    • [x] Update tests to use new task system
    • [x] Update documentation folder

    Does anyone care about being backwards compatible for a little bit or should we just rip this off like a bandaid?

    enhancement gulp4 
    opened by yocontra 63
  • changing this

    changing this

    Test the Beta

    Swap your gulp dependency reference in package.json to github.com/robrich/gulp#develop and take the next version of gulp for a ride. Give us your feedback, and we'll continue polishing.

    How to test the beta

    Switch this:

      "devDependencies": {
        "gulp": "^3.0.0"
      }
    

    to this:

      "devDependencies": {
        "gulp": "git://github.com/robrich/gulp#develop"
      }
    

    then run npm update and you'll have the latest version.

    Does everything still work? Give us your feedback.

    Then switch it back so you can get the latest from NPM when it's released.

    What's new

    • gulp.run works very differently, now using task builders like so:
    var builder = gulp.parallel('task1', 'task2', 'task3');
    gulp.run(builder, function (err, stats) {
    

    You can also use gulp.runParallel('task1', 'task2', 'task3', function (err, stats) {

    • In addition to running in maximum concurrency (after respecting all dependencies), you can run a series. These two examples run identically:

    Using dependencies:

    gulp.task('one', function (cb) {
      console.log('running task one');
      cb(null);
    });
    // notice the dependency: `two` won't begin until `one` is done
    gulp.task('two', ['one'], function (cb) {
      console.log('running task two, task 1 is done already');
      cb(null);
    });
    gulp.runParallel('one', 'two', function (err, stats) {
    // this could also be `gulp.runParallel('two', function (err, stats) {
    ...
    

    Using runSeries:

    gulp.task('one', function (cb) {
      console.log('running task one');
      cb(null);
    });
    // notice the dependency is removed here:
    gulp.task('two', function (cb) {
      console.log('running task two, task 1 is done already');
      cb(null);
    });
    gulp.runSeries('one', 'two', function (err, stats) {
    

    runSeries ensures the prior task is complete before the subsequent task begins.

    • You can also nest these builders to produce interesting workflows:
    gulp.run(gulp.series('clean', gulp.parallel('css', 'js', 'img'), 'deploy'), function (err, stats) {
    
    • run can accept an options argument, and if passed {continueOnError: false} it won't blow up if a task fails. This is great for watch tasks, and gulp.watch now uses this when you run tasks.
    gulp.watch(['**/*.less'],['less']);
    // this no longer crashes node when the less compiler fails
    
    • Nested orchestrations now run as expected, and you can use them to create a series:
    gulp.runParallel('task1', function (err) {
      gulp.runParallel('task2', function (err) {
        gulp.runParallel('task3', function (err) {
    

    but why would you bother doing it that way when you can do the same thing like this:

    gulp.runSeries('task1', 'task2', 'task3', function (err) {
    
    • You can now not only specify dependencies that must run before the task, you can also specify follow-up tasks and other properties, and the task runs scoped to a copy of your configuration object:
    gulp.task('mytask', {
      before: ['clean'],
      after: ['deploy'],
      other: 'configuration',
      passed: 'to your task'
    }, function (cb) {
      // this.other === 'configuration'
      cb(null);
    });
    
    • Many of the old crufty API details are removed, and this yields many breaking changes in places you probably weren't using anyway. See https://github.com/robrich/orchestrator/issues/30. Of particular note is that synchronous tasks are no longer supported. You must call the callback, return a promise, or return a stream. In a future version, you'll also be able to return an array of promises or an array of streams.

    How did we do? Do you like these new features? Are they ready for prime-time? Give us your feedback, and we'll continue polishing this release.

    enhancement 
    opened by robrich 60
  • Error: EPERM

    Error: EPERM

    I'm getting the following error when running gulp tasks: Error: EPERM, open 'filename....'

    Any idea what is causing this or how do I investigate the issue and resolve it?

    Regards, Gary

    opened by Gazzo100uk 56
  • What is gulp.start?

    What is gulp.start?

    I see that gulp.run was deprecated, but I also see that there is a gulp.start command that seems to do the same thing as gulp.run, but just is more aptly named and doesn't come with the deprecation warning.

    I couldn't find anything in the docs about gulp.start. Am I correct in thinking that gulp.start is a replacement for gulp.run (because of the better name), or is it some unreliable internal API that some people have stumbled upon and it's gonna disappear someday and people shouldn't rely on it?

    If it's just missing from the docs, I'd be willing to do a PR as far as I understand how it works.

    opened by CWSpear 55
  • [epic] vinyl-fs version 3.0.0

    [epic] vinyl-fs version 3.0.0

    I'm creating this issue to get some more visibility on outstanding issues in vinyl-fs for it to reach 3.0 (which we'd like to ship with gulp 4).

    If you are able to tackle any of these, the help would be very much appreciated.

    • [x] ~~Decouple opening and closing of file descriptors from src and dest - gulpjs/vinyl-fs#158~~
    • [x] ~~Support changing uid/gid from the vinyl object to the file on disk - gulpjs/vinyl-fs#157~~
    • [x] ~~Support setting setuid/setgid/sticky bits - gulpjs/vinyl-fs#156~~
    • [x] ~~Support functions for all options - gulpjs/vinyl-fs#139~~
    • [x] ~~kebabCase the filenames - gulpjs/vinyl-fs#152~~
    • [x] ~~vfs.dest(outfolder, { base.. }) ignores outfolder? - gulpjs/vinyl-fs#141~~
    • [x] ~~The mkdirp module doesn't handle modes in the best way - gulpjs/vinyl-fs#165~~
    • [x] ~~Account for process.umask - gulpjs/vinyl-fs#166~~
    • [x] ~~Test refactor - gulpjs/vinyl-fs#194~~
    • [x] ~~Separate prepareWrite into own module - gulpjs/vinyl-fs#193~~
    • [x] ~~Fix Symlink TODOs (issues need to be created)~~
    • [x] ~~Sink the symlink stream - gulpjs/vinyl-fs#195~~
    • [x] ~~Get https://github.com/gulpjs/vinyl-sourcemap up-to-snuff~~
    • [x] Rebase vinyl-fs to generate conventional changelog (https://github.com/gulpjs/vinyl-fs/issues/284)
    • [x] Finalize documentation
    gulp4 help wanted 
    opened by phated 53
  • Bring in new sourcemap system

    Bring in new sourcemap system

    • [ ] Update plugin guidelines and documentation to explain this
    • [ ] Open issues on all plugins that need this added linking to the new docs
    • [x] Add this to a few prominent modules (concat, coffee, uglify)
    enhancement documentation gulp4 
    opened by yocontra 52
  • TypeError: Cannot read property 'length' of undefined

    TypeError: Cannot read property 'length' of undefined

    Since today whenever I do a clean install of gulp I get the following error:

    TypeError: Cannot read property 'length' of undefined
    [10:38:42] TypeError: Cannot read property 'length' of undefined
        at flattenGlob (/Users/miguel/src/reco2/node_modules/glob2base/index.js:9:25)
        at setToBase (/Users/miguel/src/reco2/node_modules/glob2base/index.js:48:12)
        at module.exports (/Users/miguel/src/reco2/node_modules/glob2base/index.js:56:19)
        at Object.gs.createStream (/Users/miguel/src/reco2/node_modules/glob-stream/index.js:34:42)
        at /Users/miguel/src/reco2/node_modules/glob-stream/index.js:80:17
        at Array.map (native)
        at Object.gs.create (/Users/miguel/src/reco2/node_modules/glob-stream/index.js:79:29)
        at Gulp.src (/Users/miguel/src/reco2/node_modules/vinyl-fs/lib/src/index.js:33:23)
        at Gulp.<anonymous> (/Users/miguel/src/reco2/gulpfile.js:13:8)
        at module.exports (/Users/miguel/src/reco2/node_modules/orchestrator/lib/runTask.js:34:7)
    
    opened by dortamiguel 51
  • Curly braces in glob without commas do not work

    Curly braces in glob without commas do not work

    When curly braces ({}) are used in a glob, it does not work fine in case it contains no commas.

    Here you have a testing example:

    const { src, dest } = require('gulp'),
    	extensions = ['css', 'js'];
    
    exports.default = function () {
    	return src(`src/**/*.{${extensions.join()}}`)
    		.pipe(dest('dest/'));
    };
    

    It works good like this.

    The point is that the trouble appears as soon as the array has only one item. To resolve it, it is necessary to add a trailing comma:

    const { src, dest } = require('gulp'),
    -	extensions = ['css', 'js'];
    +	extensions = ['css'];
    
    exports.default = function () {
    -	return src(`src/**/*.{${extensions.join()}}`)
    +	return src(`src/**/*.{${extensions.join()},}`)
    		.pipe(dest('dest/'));
    };
    

    Why, with a list of options, some comma is always required? Is it right? Is this an expected feature? And Gulp cannot avoid it from usual operation of Bash, globbing patterns...? I did not found any documentation that explains this.

    opened by mvicens 0
  • Watchers do not detect specific files

    Watchers do not detect specific files

    Taking this simple sample:

    const { watch } = require('gulp');
    
    function css(cb) {
    	cb();
    }
    
    function js(cb) {
    	cb();
    }
    
    exports.default = function () {
    	watch('src/**/*.css', css);
    	watch('src/scripts/index.js', js);
    };
    

    If you create any CSS file, it is detected correctly and a "Starting 'css'..." (and the appropriate finalization) appears in the console.

    However, if you put the specific JS file, at the same time with its folder, nothing happens and no more during the stream lifecycle.

    Why this behaviour? Is it a bug, right?

    opened by mvicens 0
  • TypeScript Module `gulpfile.mts` Not Supported

    TypeScript Module `gulpfile.mts` Not Supported

    I want to use TypeScript with a .mjs (module) Gulpfile. So I renamed my gulpfile to gulpfile.mts, but it says No gulpfile found. TypeScript says it supports the .mts extension here. The above applies to gulpfile.esm.ts and gulpfile.babel.mts and gulpfile.babel.mjs too.

    help wanted 
    opened by movahhedi 1
  • chore: Translated docs to pt-BR

    chore: Translated docs to pt-BR

    Opening this PR as a replacement for #2481 - an open issue with no actionable items.

    Pinging @entrywayaudibly @sidneifjr @SidneiFarias @stearruda to try to get this completed

    opened by phated 0
  • Add note about node >14 in gulp.watch documentation

    Add note about node >14 in gulp.watch documentation

    Describe your idea for a new feature

    Just add a small warning here https://gulpjs.com/docs/en/getting-started/watching-files about NodeJS version about Gulp not supporting NodeJS >= 14 for watching files.

    Explain the problem your idea is trying to solve

    I have multiple co-workers wanting to use this gulp feature and they are all missing the fact that this is not compatible with current LTS versions of NodeJS. So it could help to prevent users that this feature is not available for recent versions of NodeJS.

    How will it benefit gulp and its users?

    I think it will help users to not have to search in closed issues or discussions to have this information. I think this is reasonable since Gulp seems not going to be updated soon.

    documentation 
    opened by nicolashenry 14
  • Add support for `gulpfile.cjs`

    Add support for `gulpfile.cjs`

    Describe your idea for a new feature

    Add support for gulpfile.cjs

    Explain the problem your idea is trying to solve

    In package.json I have type set to module but I would like to have gulpfile in CommonJS format (.cjs) with require()s. Seems like not possible now.

    How will it benefit gulp and its users?

    They could code Gulp tasks in CommonJS format without to worry about module type.

    If this feature could exist outside of gulp (like as a plugin or a module), would you be interested in helping to create and maintain it?

    opened by david-bojnansky 2
Releases(v4.0.2)
  • v4.0.2(May 6, 2019)

    Fix

    Docs

    • Add notes about esm support (4091bd3) - Closes #2278
    • Fix the Negative Globs section & examples (3c66d95) - Closes #2297
    • Remove next tag from recipes (1693a11) - Closes #2277
    • Add default task wrappers to Watching Files examples to make runnable (d916276) - Closes #2322
    • Fix syntax error in lastRun API docs (ea52a92) - Closes #2315
    • Fix typo in Explaining Globs (5d81f42) - Closes #2326

    Build

    • Add node 12 to Travis & Azure (b4b5a68)
    Source code(tar.gz)
    Source code(zip)
  • v4.0.1(Apr 21, 2019)

    Fix

    Docs

    • Fix error in ES2015 usage example (a4e8d48) - Closes #2099 #2100
    • Add temporary notice for 4.0.0 vs 3.9.1 documentation (126423a) - Closes #2121
    • Improve recipe for empty glob array (45830cf) - Closes #2122
    • Reword standard to default (b065a13)
    • Fix recipe typo (86acdea) - Closes #2156
    • Add front-matter to each file (d693e49) - Closes #2109
    • Rename "Getting Started" to "Quick Start" & update it (6a0fa00)
    • Add "Creating Tasks" documentation (21b6962)
    • Add "JavaScript and Gulpfiles" documentation (31adf07)
    • Add "Working with Files" documentation (50fafc6)
    • Add "Async Completion" documentation (ad8b568)
    • Add "Explaining Globs" documentation (f8cafa0)
    • Add "Using Plugins" documentation (233c3f9)
    • Add "Watching Files" documentation (f3f2d9f)
    • Add Table of Contents to "Getting Started" directory (a43caf2)
    • Improve & fix parts of Getting Started (84b0234)
    • Create and link-to a "docs missing" page for LINK_NEEDED references (2bd75d0)
    • Redirect users to new Getting Started guides (53e9727)
    • Temporarily reference gulp@next in Quick Start (2cecf1e)
    • Fixed a capitalization typo in a heading (3d051d8) - Closes #2242
    • Use h2 headers within Quick Start documentation (921312c) - Closes #2241
    • Fix for nested directories references (4c2b9a7)
    • Add some more cleanup for Docusaurus (6a8fd8f)
    • Temporarily point LINK_NEEDED references to documentation-missing.md (df7cdcb)
    • API documentation improvements based on feedback (0a68710)
    • Update API Table of Contents (d6dd438)
    • Add API Concepts documentation (8dd3361)
    • Add Vinyl.isCustomProp() documentation (40ee801)
    • Add Vinyl.isVinyl() documentation (25a22bf)
    • Add Vinyl documentation (fc09067)
    • Update watch() documentation (69c22f0)
    • Update tree() documentation (ebb9818)
    • Update task() documentation (b636a9c)
    • Update symlink() documentation (d580efa)
    • Update src() documentation (d95b457)
    • Update series() documentation (4169cb6)
    • Update registry() documentation (d680487)
    • Update parallel() documentation (dc3cba7)
    • Update lastRun() documentation (363df21)
    • Update dest() documentation (e447d81)
    • Split API docs into separate markdown files (a3b8ce1)
    • Fix hash link (af4bd51)
    • Replace some links in Getting Started (c433c70)
    • Remove temporary workaround for facebook/Docusaurus#257 (5c07954) - Closes facebook/Docusaurus#257
    • Added code ticks to "null" where missing (cb67319) - Closes #2243
    • Fix broken link in lastRun (d35653e)
    • Add front-matter to documentation-missing page (a553cfd)
    • Improve grammar on Concepts (01cfcc5) - Closes #2247
    • Remove spaces around
      (c960c1d)
    • Improve grammar in src (eb493a2) - Closes #2248
    • Fix formatting error (ca6ba35) - Closes #2250
    • Fix formatting of lastRun (8569f85) - Closes #2251
    • Add missing link in watch (e35bdac) - Closes #2252
    • Fix broken link in tasks (6d43750) - Closes #2253
    • Improve punctuation in tree (8e9fd70) - Closes #2254
    • Fix mistake in "Splitting a gulpfile" (96c353d) - Closes #2255
    • Remove front-matter from outdated pages (c5af6f1)
    • Fix broken link in Table of Contents (c641369) - Closes #2260
    • Update the babel dependencies to install & configuration needed (7239cf1) - Closes #2136
    • Add "What's new in 4.0" section (75ea634) - Closes #2089 #2267
    • Cleanup README for "latest" bump (24e202b) - Closes #2268
    • Revert "next" reference now that 4.0 is latest (ed27cbe)
    • Add Azure Pipelines badge (f3f0548) - Closes #2310
    • Add note about transpilation to "Splitting a Gulpfile" section (53b9037) - Closes #2311 #2312
    • Improve wording of file rename (88437f2) - Closes #2314

    Upgrade

    • Update glob-watcher, gulp-cli, and undertaker dependencies & rimraf devDep (d3734d3)

    Build

    • Add node 10 to CI matrices (a5eac1c)
    • Remove jscs & update eslint for code formatting rules (ad8a2f7)
    • Fix Azure comment (34a6d53) - Closes #2307
    • Add Azure Pipelines CI (b2c6c7e) - Closes #2299

    Scaffold

    • Mark *.png and *.jpg as binary files to git (a010db6)
    • Update some links and license year (1027236)
    • Add tidelift configuration (49b5aca)
    • Add new expense policy (9819957)
    • Add support-bot template (9078c49)
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Jan 1, 2018)

  • v4.0.0-alpha.3(Jan 1, 2018)

    Breaking

    • Upgrade major versions of glob-watcher, gulp-cli & vinyl-fs (c1ba80c)
    • Replace chokidar as gulp.watch with glob-watcher wrapper (0c66069)

    Fix

    • Add support for gulp.watch usage w/o opts or callback (9fc4125)

    Update

    • Bind all undertaker functions on the gulp instance to allow destructuring (c691572)
    • Use published gulp-cli (468a703)

    Docs

    • Clarify incremental builds example (c3dbc10)
    • Improve ES2015 task exporting examples (89acc5c)
    • Fix syntax in recipe example (723cbc4) - Closes #1715
    • Have gulp.lastRun take a function to avoid task registration (d420a6a)
    • Fix changelog typos (e931cb0) - Closes #1696
    • Add a "BrowserSync with Gulp 4" recipe (477db84)
    • Add options.cwd for gulp.src API (d4ed3c7)
    • Update gulp.watch API to align with glob-watcher (5dc3b07)
    • Add "Project structure" section to CONTRIBUTING.md (0ac9e04)
    • Add missing parenthesis (1351fb8)
    • Add link to "Upgrading to Gulp 4" article (e894312)
    • Update "getting started" example for new syntax (5ddd673)
    • Add ES2015 gulpfile example to readme (e1afdfd)
    • Add link to "Intro to Gulp 4" video (d90198c)
    • Replace irc with gitter channel (83f5632)
    • Update table of contents for API (b764543)
    • Improve format of API (d0ced75)

    Upgrade

    Source code(tar.gz)
    Source code(zip)
  • v4.0.0-alpha.2(Jan 1, 2018)

    Breaking

    • Replace vinyl-fs watch/gaze with chokidar (2cd0e1e)
    • Only support tasks that are functions in gulp.watch (1d70cfb)
    • Remove array & string task support from gulp.watch (b085e95)

    Fix

    • Set chokidar option ignoreIntial: true by default (355fc4e)
    • Throw better error when watch parameters are invalid (409f19a) - Closes #1002

    New

    • Expose vfs.symlink API on gulp (6c46116)

    Update

    • Add test to make sure no functions are kicked off when they should not (bc352dd)
    • Use unpublished vinyl-fs version (cac9a8a)

    Docs

    • Update "split tasks" recipe to use gulp-hub (f7e7d4c)
    • Align API with undertaker docs (0f3151e)
    • Improve gulp.watch API with Chokidar specifics (263eeea)
    • Add gulp.registry API & examples (3f843b8)
    • Improve API references (be2df06)
    • Add example of -T/--tasks and --tasks-simple (c1012cd)
    • Add gulp.tree API & examples (8aa1022)
    • Add recipe for running shell commands with child_process or gulp-exec (98b9504)
    • Update "clean" task in example for "del" syntax change (cacc173)
    • Add note about opt-in symlink following (c4b6922)
    • Mention .description property & add usage examples (ad627e6)
    • Outline using named functions and when to use gulp.task (1abb5ed)
    • Improve incremental build example & add gulp.lastRun API (d942cf5)
    • Added allowEmpty option for gulp.src (8806326)
    • Add gulp.series/gulp.parallel APIs, update gulp.task API & vinyl-fs options (0ac0a0e)
    • Improve changelog (87e9cb6)

    Upgrade

    Source code(tar.gz)
    Source code(zip)
  • v4.0.0-alpha.1(Jan 1, 2018)

    Breaking

    • Replace Orchestrator with Undertaker (9fda7b4)

    New

    Update

    • Remove gulp-util & depend on unpublished gulp-cli (6095f35)
    • Improve gulp.watch implementation & tests (9abb0a4)
    • Replace inline CLI code with gulp-cli dependency (f0942aa)

    Docs

    • Add "Rollup with rollup-stream" recipe. (b42acd9)
    • Add npm init step to Getting Started (71953b5)
    • Add backers and sponsors from OpenCollective (347ed5a)
    • Fix grammar in dealing-with-streams.md (de1acf6)
    • Create issue template to cover common issues (4d1a8a8)
    • Fix broken gulp-header/gulp-footer links (54169eb) - Closes #1851 #1854
    • Update browserify-uglify-sourcemap recipe with clarification (6899a6c)
    • Clarify CLI semantics when listing more than one task (62323fc)
    • Fix issue with formatting in dealing-with-streams.md (a2badd6) - Closes #1948
    • Fix sub-lists in writing-a-plugin guidelines (d634e95) - Closes #1955
    • Add "Getting Started with Gulp" to books section (a0ec3ff)
    • Integrate pump documentation from gulp-uglify (45adfc3) - Closes #1791
    • Remove link to Spanish documentation that no longer exists (24914f3)
    • Replace BetterError with plugin-error reference (58b2945)
    • Fix a broken header in writing-a-plugin (5df0865) - Closes #1984
    • Improve "Getting Started" (c95e09e)
    • Improve link descriptions (c4d219e)
    • Recipe for running gulp via cron task (2c6d551)
    • Change jade references to pug (81fc26d)
    • Specify where to create package.json (4f9465a)
    • Fix and improve Transform example in writing-a-plugin docs (4b118b9)
    • Update urls to https (ff4e719)
    • Update browserify links (260d5c4)
    • Remove duplicate "the" typo (5368d2c)
    • Add 4.0 changelog (d331a4e)
    • Update syntax in readme example (f787ba5)
    • Update changelog (2d0fa20)

    Upgrade

    Build

    • CI test under node version 5 and 6 (3623061)
    • CI test under node version 7 and 8 (f1f7d77)
    Source code(tar.gz)
    Source code(zip)
  • v3.9.1(Apr 21, 2019)

  • v3.8.11(Apr 21, 2019)

  • v3.8.10(Apr 21, 2019)

  • v3.8.9(Apr 21, 2019)

  • v3.8.7(Apr 21, 2019)

  • v3.8.6(Apr 21, 2019)

  • v3.8.1(Apr 21, 2019)

  • 3.8(Jun 10, 2014)

    3.8.0

    • update vinyl-fs
      • gulp.src is now a writable passthrough, this means you can use it to add files to your pipeline at any point
      • gulp.dest can now take a function to determine the folder

    This is now possible!

    gulp.src('lib/*.js')
      .pipe(uglify())
      .pipe(gulp.src('styles/*.css'))
      .pipe(gulp.dest(function(file){
        // i dont know, you can do something cool here
        return 'build/whatever';
      }));
    
    Source code(tar.gz)
    Source code(zip)
  • 3.7(Jun 1, 2014)

    3.7.0

    • update vinyl-fs to remove BOM from UTF8 files
    • add --tasks-simple flag for plaintext task listings
    • updated autocomplete scripts to be simpler and use new --tasks-simple flag
    • added support for transpilers via liftoff 0.11 and interpret
      • just npm install your compiler (coffee-script for example) and it will work out of the box
    Source code(tar.gz)
    Source code(zip)
  • 3.5(Jan 26, 2014)

  • 3.4(Jan 17, 2014)

Owner
gulp
A toolkit to automate & enhance your workflow
gulp
Package your Node.js project into an executable

Disclaimer: pkg was created for use within containers and is not intended for use in serverless environments. For those using Vercel, this means that

Vercel 22.6k Jan 7, 2023
This is a Webpack Project about Todo-list which you can add your to-dos, edit them, add mark as completed.

Todo-list-webpack This website Todo-list-webpack provides users a convenient way to keep track of their todos. Built With HTML CSS JavaScript Linters

Omar Salem 16 Jul 14, 2022
Free and open fair-code licensed node based Workflow Automation Tool. Easily automate tasks across different services.

n8n - Workflow Automation Tool n8n is an extendable workflow automation tool. With a fair-code distribution model, n8n will always have visible source

n8n - Workflow Automation 27.2k Dec 30, 2022
Workflow to re-trigger workflow of all open PRs when base updates

Workflow to re-trigger workflow of all open PRs when base updates

James Tan 4 Aug 28, 2022
A GitHub app to report failed workflow job actions and notify pull request creator with custom report message for the failed workflow job.

Workflow Reporter A GitHub App built with Probot that reports failed workflow job actions and notify the pull request creator with custom report messa

Divyanshu Shekhar 14 Nov 12, 2022
React features to enhance using Rollbar.js in React Applications

Rollbar React SDK React features to enhance using Rollbar.js in React Applications. This SDK provides a wrapper around the base Rollbar.js SDK in orde

Rollbar 39 Jan 3, 2023
The Power CAT code components are a set of Power Apps component framework (PCF) controls that can be used to enhance power apps.

Power CAT code components The Power CAT code components are a set of Power Apps component framework (PCF) controls that can be used to enhance power a

Microsoft 70 Jan 2, 2023
An E-commerce website that allows to Buy/Sell products, designed to strengthen small vendors to enhance their business

Developed using MERN Stack, an E-commerce website that allows to Buy/Sell products, designed to strengthen small vendors to enhance their business, fu

Inderjit Shahi 5 Jun 25, 2022
automate your workspace version & publish by using conventional-changelog-commits

Lerna-Lite ?? Lerna-Lite is a super light version of the original Lerna About Lerna-Lite Why create this lib/fork? See it in Action README Badge Insta

Ghislain B. 307 Dec 24, 2022
automate your workspace version & publish by using conventional-changelog-commits

Lerna-Lite ?? Lerna-Lite is a super light version of the original Lerna About Lerna-Lite Why create this lib/fork? See it in Action README Badge Insta

Ghislain B. 129 May 8, 2022
Create front end projects from templates, add dependencies, and automate the resulting projects

volo Create browser-based, front-end projects from project templates, and add dependencies by fetching them from GitHub. Once your project is set up,

volojs 1.4k Jan 2, 2023
A Node.js tool to automate end-to-end web testing.

A Node.js tool to automate end-to-end web testing. Write tests in JS or TypeScript, run them and view results. Homepage • Documentation • FAQ • Suppor

Developer Express Inc. 9.5k Jan 9, 2023
📡 Encrypt and authenticate DevTools to use it securely remotely. Add HTTPS, and authentication to --remote-debugging-port to debug, inspect and automate from anywhere and collaborate securely on bugs.

?? Encrypt and authenticate DevTools to use it securely remotely. Add HTTPS, and authentication to --remote-debugging-port to debug, inspect and automate from anywhere and collaborate securely on bugs.

Cris 9 May 5, 2022
📡 Encrypt and authenticate DevTools to use it securely remotely. Add HTTPS, and authentication to --remote-debugging-port to debug, inspect and automate from anywhere and collaborate securely on bugs.

?? Encrypt and authenticate DevTools to use it securely remotely. Add HTTPS, and authentication to --remote-debugging-port to debug, inspect and automate from anywhere and collaborate securely on bugs.

Cris 9 May 5, 2022
Simple package to facilitate and automate the use of charts in Laravel 5.x using Chartjs v2 library

laravel-chartjs - Chart.js v2 wrapper for Laravel 5.x Simple package to facilitate and automate the use of charts in Laravel 5.x using the Chart.js v2

Felix Costa 473 Dec 15, 2022
🤖 Script to automate creating built branches

build-this-branch Script to automate creating built branches. Support this project by ⭐️ starring and sharing it. Follow me to see what other cool pro

hiroki osame 22 Aug 6, 2022
Automate osu! replay recording

o!rdr server o!rdr is a free and easy-to-use API / website that allows you to render osu! videos of replays using danser. This is an open-source versi

null 8 Nov 29, 2022
Tooling to automate converting .xlsx localisation to in-game compatible .json files for Vampire Survivors

vampire-survivors-localisation This tooling is used to automate converting .xlsx localisation to in-game compatible .json files for the game Vampire S

null 17 Dec 8, 2022