## Usage ```js const Base = require('base'); const tasks = require('base-task'); const base = new Base(); base.use(tasks()); /** * Define tasks */ base.task('foo', function(cb) { console.log('this is foo!'); cb(); }); base.task('bar', function(cb) { console.log('this is bar!'); cb(); }); /** * Build tasks */ base.build(['foo', 'bar']) .then(() => { // this is foo! // this is bar! console.log('done!'); }) .catch(console.error) ``` See the [composer][] documentation for more details, or to create bug reports related to running or registering tasks. ## API ### .task Register a task **Params** * `name` **{String}**: Task name to register (tasks are cached on `app.tasks`) * `dependencies` **{String|Array|Function}**: String, list or array of tasks. * `callback` **{Function}**: Function to be called when the task is executed. Task functions should either return a stream or call the callback to let [composer][] know when the task is finished. **Examples** Register a task. ```js app.task('default', function() { // return the stream to signal "done" return app.src('pages/*.hbs') .pipe(app.dest('dist')); }); ``` Register a task with dependencies (other tasks to run before executing the task): ```js app.task('site', ['styles'], function() { return app.src('pages/*.hbs') .pipe(app.dest('dist')); }); app.task('default', ['site']); ``` **Get a task** ```js const task = app.task('site'); ``` ### .build Run a task or array of tasks. **Promise examples** ```js // run the "default" task, if defined app.build(); app.build('default'); // run an array of tasks app.build(['foo', 'bar']) .then(() => console.log('done!')) .catch(console.error); ``` **Callback examples** ```js // run the "default" task, if defined app.build(function(err, results) { if (err) return console.error(err); console.log(results); }); app.build('default', function(err, results) { if (err) return console.error(err); console.log(results); }); app.build(['foo', 'bar'], function(err, results) { if (err) return console.error(err); console.log(results); }); ``` ### .series Compose task or list of tasks into a single function that runs the tasks in series. **Params** * `tasks` **{String|Array|Function}**: List of tasks by name, function, or array of names/functions. * `returns` **{Function}**: Composed function that may take a callback function. **Example** ```js app.task('foo', function(cb) { console.log('this is foo'); cb(); }); const build = app.series('foo', function(cb) { console.log('this is bar'); cb(); }); build(function(err) { if (err) return console.error(err); console.log('finished'); }); //=> this is foo //=> this is bar //=> finished ``` ### .parallel Compose task or list of tasks into a single function that runs the tasks in parallel. **Params** * `tasks` **{String|Array|Function}**: List of tasks by name, function, or array of names/functions. * `returns` **{Function}**: Composed function that may take a callback function. **Example** ```js app.task('foo', function(cb) { setTimeout(function() { console.log('this is foo'); cb(); }, 500); }); const build = app.parallel('foo', function(cb) { console.log('this is bar'); cb(); }); build(function(err) { if (err) return console.error(err); console.log('finished'); }); //=> this is bar //=> this is foo //=> finished ``` ## Events The following events are emitted by [composer][]. See the composer docs for more details ### on.task Emitted when a `task` is `register`, `starting` and `finished`. ```js app.on('task', function(task) { console.log(task.status); //=> 'register' }); ``` ### on.build Emitted when a `build` is `starting` and `finished`. ```js app.on('build', function(build) { console.log(build.status); //=> 'starting' }); ``` ## History ### v2.0.0 - Bumped [composer][] to v2.0.0. ### v0.3.0 - Bumped [composer][] to v0.11.0, so the `.watch` method is no longer included by default. To add `.watch`, use the [base-watch][] plugin.