ache
npm i ache -g
Why?
I was sick and tired of build tools available. I simply want to leverage bash / and shell scripts and add a templating component on top of them using node. Named ache
because the existing tools are a headache, and it rhymes with make
, jake
, rake
, you get the idea.
How it works
Add a achefile.js
or achefiles
directory with many different JavaScript files to your project.
let helloWorld = `echo 'hello world'`
Then run ache hello-world
and your done.
Ache Spec
I designed ache
to inevitably support three distinct syntax types. Providing some versatility.
Syntax 1
Export values can return a execString
directly.
let helloWorld = `echo 'hello-world'`
Syntax 2
Export values can return a special ache-specific Cmd
class, where you can pass a execString
.
let helloWorld = `echo 'hello-world'`
The benefit here is that you can add optional params to helloWorld
for instance helloWorld.usage
.
Syntax 3
Export values can return that same Cmd
class, when a function is passed you have access to global data from the root ache
consumer. This allows the most amount of uniformity between scripts and modularity because you don't need to use globals.
let echo = `echo ''`
Another benefit of this approach is that you can preform validation like this.
let helloWorld = { if argv_1 !== 'please' throw 'ask nicely' return ` echo 'hello-world' `}
Ache Specific
Here's the operational flags you can pass to ache
.
ache --ache-scope
changes the path where ache looks for your ache scopeache --ache-cwd
changes the current working directory CWD to a specified pathache --ache-list
lists all the commands in the ache scopeache --ache-dry-run
logs the string command to be run (without running it)ache --ache-error
logs error stack trace instead of just error messageache --ache-verbose
shortcut forDEBUG=ache
and--ache-error
Examples
examples$ npm i ache -g
/Users/thomasreggi/.nvm/versions/node/v6.2.2/bin/ache -> /Users/thomasreggi/.nvm/versions/node/v6.2.2/lib/node_modules/ache/lib/bin.js
/Users/thomasreggi/.nvm/versions/node/v6.2.2/lib
└── ache@0.0.1
examples$ cd 01_example/
01_example$ ache
01_example$ ache list
[ 'meow-mix' ]
01_example$ ache meow-mix
meow meow meow meow meow meow
01_example$ cd ..
examples$ cd 02_example/
02_example$ ache list
[ 'bar', 'baz', 'foo', 'hello-world' ]
02_example$ ache bar
bar
02_example$ ache hello-world
hello-world
02_example$ cd ..
examples$ cd 03_example/
03_example$ ache list
[ 'bar', 'baz', 'foo', 'hello-world', 'meow-mix' ]
03_example$ ache hello-world
hello-world
03_example$
Here's an example of scope diving & setting the cwd.
ache$ cd examples
examples$ ache --ache-scope ./01_example/ --ache-cwd ./03_example/ cat-file
03_example
examples$ ache --ache-scope ./01_example/ --ache-cwd ./03_example/ cat-file --ache-verbose
ache starting +0ms
ache argv {"_":["cat-file"],"ache-scope":"./01_example/","ache-cwd":"./03_example/","ache-verbose":true} +4ms
ache cwd /Users/thomasreggi/Desktop/ache/examples +1ms
ache ache scope /Users/thomasreggi/Desktop/ache/examples/01_example +0ms
ache ache cwd /Users/thomasreggi/Desktop/ache/examples/03_example +0ms
ache commands meow-mix, cat-file +124ms
03_example