Package Exports
- oh
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (oh) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
oh
In-development PoC of a tiny, development and CI-friendly task-runner.
To do
- tests!
- autocomplete task names
-  allow multiple manifests (oh.compile.js=>oh compile.css,oh.test.js=>oh test.app)
Features
- small, simple API
- verbose by default
- fails visibly then kills the process on error, so that any errors cannot go unnoticed e.g. on a CI
Why?
- make really just wants to make things, and can be too restrictive e.g. it's hard to pass args or use modules from npm
- npm scripts can be too terse
- gulp/grunt et al are complex and often rely on 3rd party plugins
Usage
Install oh: npm i -g oh or yarn global add oh.
Then create a task manifest called oh.js, for example this one:
// oh.js
module.exports = {
    __before() {
        this.log('this happens before the tasks start');
    },
    main() {
        return this.run('logOpts').then(() => this.run('other'));
    },
    other() {
        return this.run(['other2', 'ls']).then(() => this.log('ran others'));
    },
    other2() {
        return new Promise(resolve => {
            setTimeout(resolve, 2000);
        });
    },
    ls() {
        return this.exec('ls');
    },
    logOpts() {
        this.log(this.args);
    },
    __after() {
        this.log('this happens after the tasks end');
    }
};
Now you can run oh main, oh ls etc.
You can also run multiple tasks e.g. oh other other2. They will run in series.
Oh provides some options:
  -h, --help       output usage information            [boolean]
  -v, --version    output the version number           [boolean]
  -q, --quiet      only log error output from tasks    [boolean]
  --oh             path to an oh.js manifest            [string]Any other arguments you provide are passed directly through to your tasks e.g.
> oh main --dev # this.args.dev === true
> oh logOpts --greeting 'hi there' # this.args.greeting === 'hi there'API
Any function that you export from oh.js becomes a task.
The following helpers are available:
this.run(String|Array)
Run other tasks defined in oh.js. An array of task names will run in parallel.
Returns a promise that resolves once the task(s) completes.
this.exec(String)
Executes a string as a terminal command, using local binaries if they're available (like npm scripts).
Returns a promise that resolves once the command completes.
this.args
An object representing any options in the command, except h, help, v and version.
this.log(anything, [anything])
Tell yourself something about whats going on.
this.info(anything, [anything])
Tell yourself something about what you've done or should do now.
this.error(anything, [anything])
Stop everything, with an explanation. As with all errors, this will kill the process to prevent errors going unnoticed.
Built-in tasks
Two optional setup/teardown-style tasks are available:
this.__before(function)
Do something before the tasks start e.g. check the version of node your running in, npm i etc.
this.__after(function)
Do something after the tasks end e.g. clean up artefacts, restore previous state etc.
Development
- yarn install
- yarn linkto add the local binary to your path (you need- yarn@^0.19.0for- linkto work)
- only tried with Node 6 so far
Files
- oh.jstask manifest – this is the file you'd expect to see in a project root
- index.jsthe application that runs the tasks in- oh.js
- binthe script- oh ...runs on the command line