Tiny task-based module for whipping up "hookable" build scripts
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.gitignore
README.md
index.js
package.json
test.js

README.md

oblige

Tiny task-based module for whipping up "hookable" build scripts, with the intention of being used in decorated interfaces.

Installation

npm install oblige

API

tasks = require('oblige')

The "root" oblige instance. Captures the events across all oblige instances.

tasks.create(name, [meta], taskfn)

Creates a new task. meta is optional, and handles two properties (also optional):

  • meta.description: defaults to an empty string.
  • meta.before: A string or array of string task names - task.run will call these tasks in sequence before running the task.

taskfn is called when running the task, and is passed a done callback to the first argument you should call when it's complete. If done is passed an error, any parent tasks will stop running.

tasks.run(name, callback)

Runs a task, calling callback(err) when complete.

tasks.on('data', callback)

Every time a new task is created, oblige emits it as a data event with the task that's been loaded.

child = tasks()

Similarly to timber, you can create child task handlers - these are almost totally independent, except the "root" instance will capture events from these as well.

child = tasks('namespaced')

By supplying a string key to the function, you're returned a new instance unique to that name - use it twice in different places and you'll receive the same instance.

Example

Take a simple task runner:

// runner.js
var oblige = require('oblige')

var command = process.argv[2]
  , taskName = process.argv[3]

if (command === 'list') {
  oblige.on('data', function(task) {
    console.log(task.name + ': ' + task.description)
  })
}

require('./tasks')

if (command === 'run') {
  oblige.run(taskName, function(err) {
    if (err) throw err
    console.log('ok!')
    process.exit()
  })
}

And a tasks file:

// tasks.js
var oblige = require('oblige')

oblige.task('minify', {
  description: 'Minifies frontend assets'
  before: [
      'minify-css'
    , 'minify-js'
  ]
})

oblige.task('minify-css', {
  description: 'Minifies CSS'
}, function(done) {
  console.log('minifying css...')
  // ...
  done()
})

oblige.task('minify-js', {
  description: 'Minifies JavaScript'
}, function(done) {
  console.log('minifying js...')
  // ...
  done()
})

You would be able to run the command and get this:

$ node runner.js list
minify: Minifies frontend assets
minify-css: Minifies CSS
minify-js: Minifies JavaScript

$ node runner.js run minify
minifying css...
minifying js...
ok!

$ node runner.js run minify-js
minifying js...
ok!