Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/reggi/ache
:loudspeaker: :shoe: Elevate your npm scripts, JavaScript-based shell script templating.
https://github.com/reggi/ache
Last synced: about 1 month ago
JSON representation
:loudspeaker: :shoe: Elevate your npm scripts, JavaScript-based shell script templating.
- Host: GitHub
- URL: https://github.com/reggi/ache
- Owner: reggi
- Created: 2016-06-25T22:59:45.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2016-06-27T13:42:46.000Z (over 8 years ago)
- Last Synced: 2024-10-05T10:51:06.164Z (about 2 months ago)
- Language: JavaScript
- Homepage:
- Size: 10.7 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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.
```js
export 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.
```js
export let helloWorld = `
echo 'hello-world'
`
```### Syntax 2
Export values can return a special ache-specific `Cmd` class, where you can pass a `execString`.
```js
export let helloWorld = new Cmd(`
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.
```js
export let echo = new Cmd(({argv}) => `
echo '${argv._[1]}'
`)
```Another benefit of this approach is that you can preform validation like this.
```js
export let helloWorld = new Cmd(({argv}) => {
if (argv._[1] !== 'please') throw new Error('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 scope
* `ache --ache-cwd` changes the current working directory CWD to a specified path
* `ache --ache-list` lists all the commands in the ache scope
* `ache --ache-dry-run` logs the string command to be run (without running it)
* `ache --ache-error` logs error stack trace instead of just error message
* `ache --ache-verbose` shortcut for `DEBUG=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
└── [email protected]examples$ cd 01_example/
01_example$ ache
01_example$ ache list
[ 'meow-mix' ]
01_example$ ache meow-mix
meow meow meow meow meow meow01_example$ cd ..
examples$ cd 02_example/
02_example$ ache list
[ 'bar', 'baz', 'foo', 'hello-world' ]
02_example$ ache bar
bar02_example$ ache hello-world
hello-world02_example$ cd ..
examples$ cd 03_example/
03_example$ ache list
[ 'bar', 'baz', 'foo', 'hello-world', 'meow-mix' ]
03_example$ ache hello-world
hello-world03_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
```