Coder Social home page Coder Social logo

oblige's Introduction

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!

oblige's People

Contributors

hughsk avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

oblige's Issues

node-task

(Sorry for the issue, was the most relevant place to post this)

This popped up on DailyJS today: node-task (The spec wiki does a better job of explaining things)

It's basically an attempt at standardising the 'tasks' used by projects like Grunt and Brunch - It's still early stages but it seems like a good idea and worth keeping an eye on..

From DailyJS:

Node Task, sent in by Khalid Khan, is a specification for a promise-based API that wraps around JavaScript tasks. The idea is that tasks used with projects like Grunt should be compatible, and able to be processed through an arbitrary pipeline:

Eventually, it is hoped that popular JS libraries will maintain their own node-task modules (think jshint, stylus, handlebars, etc). If/when this happens, it will be trivial to pass files through an arbitrary pipeline of interactions and transformations utilizing libraries across the entire npm ecosystem.

After reading through each specification, it seems like an interesting attempt to standardise Grunt-like tasks. The API seems streams-inspired, as it’s based around EventEmitter2 with various additional methods that are left for implementors to fill in.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.