Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gulp-task

Basic Info

Preface

This was written as a wrapper for gulp.task in order to get promise-based dependency management.

The documentation and source is written in coffeescript but it should work with vanilla gulp just the same.

Installation

npm install --save gulp-task
task=require'gulp-task'

Optionally, you can configure it to automatically register gulp tasks:

task.configure gulp

API

This module has 4 functions. Here is the order that you'll most likely use them:

  • task.configure
  • task
  • task.run
  • task.watch
  • task.getTaskNames

task.configure(gulp)

This makes it so that when you run task(name, cb), you also register the same task with gulp, enabling command line execution.

task(name, cb)

This registers a new task to later be run via task.run. Dependencies are taken care of via promises.

task.run(name|cb)

This accepts either the name of a previously registered task or an anonymous function.

task.getTaskNames()

This simply returns a sorted list the names of registered tasks.

Notes

A Note About Not Running task.configure

This module was written as a replacement for gulp.task. You're still free to use gulp.task directly but those tasks registered via gulp.task will not be visible via task.run. A usage where you don't run task.configure gulp might looks something like:

gulp.task 'build', ->
task.run 'compile'
.then -> task.run 'copy'
task 'compile', -> #compile code
task 'copy', -> #copy code

In this case, you'd be able to run coffeegulp build from command-line but not coffeegulp compile or coffeegulp copy.
This "private task" effect is why configuring was made optional.

A Note About Tasks

task.run returns a Promise. How that promise is resolved depends on the return value of the function being run.

Regardless of if you're running an anonymous function or calling a registered one by name, the nature of the returned promise falls into three cases.

Case 1: Task Returns a Promise

This is simple enough. task.run simply returns the promise.

Case 2: Task Returns a Stream

task.run returns a promise that resolves via .pipe gulpCallback -> resolve stream

Case 3: Task Returns Something Else

In this event, task.run simply returns a resolved promise after running the task.

A Note About .then -> gulp.src

Let's say that you're defining a task that does some stuff via task.run and then calls .then on the promise and provides a callback which returns a Stream.

This would be an issue. The resolve chain would not wait for the gulp.src stream to end before continuing.
This might result in unexpected concurrency and reporting issues.

It's important to wrap streams in a task.run -> when being called from within a .then ->.

###Acceptable

task'copy', ->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->task.run'copy'
task'build', ->task.run'compile'
.then->task.run->gulp.src('src')
.pipegulp.dest'dest'
task'build', ->task.run'compile'
.then->somethingSynchronous()
task'watch', ->task.run'compile'
.then-># Warning: This is over-simplified and potentially problematic.# See "Watch Example" below for more info.gulp.watch ['src/**/*.coffee'], ->task.run'compile'

###Not Acceptable

task'build', ->task.run'compile'
.then->gulp.src('src')
.pipegulp.dest'dest'

Examples


Semi-Realistic Stream Example

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'jade=require'gulp-jade'rimraf=require'gulp-rimraf'Promise=require'bluebird'task.configure gulp
task'refresh', ->task.run'clean'
.then->task.run'compile'task'clean', ->gulp.src'bin', read:false
.piperimraf()
task'compile', ->Promise.all([
task.run'compile:coffee'task.run'compile:jade'
])
task'compile:coffee', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'compile:jade', ->gulp.src"src/**/*.jade"
.pipejade()
.pipegulp.dest'bin'

Output

$ coffeegulp rebuild[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'rebuild'...[task] Running 'rebuild'[task] Running 'clean'[task] Finished 'clean' in 11.546 ms[task] Running 'compile'[task] Running 'compile:coffee'[task] Running 'compile:jade'[task] Finished 'compile:coffee' in 56.239 ms[task] Finished 'compile:jade' in 53.605 ms[task] Finished 'compile' in 56.998 ms[task] Finished 'rebuild' in 69.254 ms[gulp] Finished 'rebuild' after 69 ms

Hello World

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
task'default', ->task.run'hello'task'hello', ->console.log'Hello World!'

Output

$ coffeegulp[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'default'...[task] Running 'default'[task] Running 'hello'Hello World![task] Finished 'hello' in 1.244 ms[task] Finished 'default' in 1.728 ms[gulp] Finished 'default' after 1.91 ms

Basic Stream

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'

Output

$ coffeegulp compile[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'compile'...[task] Running 'compile'[task] Finished 'compile' in 22.872 ms[gulp] Finished 'compile' after 23 ms

Basic task.watch

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'coffee=require'gulp-coffee'gulp=require'gulp'task.configure gulp
task'compile', ->gulp.src"src/**/*.coffee"
.pipecoffee()
.pipegulp.dest'bin'task'watch', ->task.run'compile'
.then->task.watch ['src/**/*.coffee'], ->task.run'compile'

Output

$ coffeegulp watch[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'watch'...[task] Running 'watch'[task] Running 'compile'[task] Finished 'compile' in 14.42 ms[task] Finished 'watch' in 20.66 ms[gulp] Finished 'watch' after 21 ms<MADE CHANGE>[task] Running 'compile'[task] Finished 'compile' in 3.800 ms

Running Tasks in Series / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'series', ->task.run'a'
.then->task.run'b'
.then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp series[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'series'...[task] Running 'series'[task] Running 'a'Task A![task] Finished 'a' in 1.502 s[task] Running 'b'Task B![task] Finished 'b' in 2.001 sWe Are Done[task] Finished 'series' in 3.504 s[gulp] Finished 'series' after 3.5 s

Running Tasks in Parallel / Using Promises

gulpfile.coffee

task=require'gulp-task'gulp=require'gulp'task.configure gulp
Promise=require'bluebird'task'parallel', ->Promise.all([
task.run'a'task.run'b'
]).then->console.log'We Are Done'task'a', ->newPromise (resolve, reject)->setTimeout->console.log'Task A!'resolve()
, 1500task'b', ->newPromise (resolve, reject)->setTimeout->console.log'Task B!'resolve()
, 2000

Output

$ coffeegulp parallel[gulp] Using gulpfile ~/Documents/GitProjects/gulp-task/gulpfile.coffee[gulp] Starting 'parallel'...[task] Running 'parallel'[task] Running 'a'[task] Running 'b'Task A![task] Finished 'a' in 1.502 sTask B![task] Finished 'b' in 2.002 sWe Are Done[task] Finished 'parallel' in 2.003 s[gulp] Finished 'parallel' after 2 s

About

A wrapper of gulp.task that enables promise-based dependency management

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages