Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    obligepublic

    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!

    Keywords

    none

    install

    npm i oblige

    Downloadslast 7 days

    2

    version

    0.0.1

    license

    none

    repository

    github.com

    last publish

    collaborators

    • avatar