A framework for building reusable JS tasks.
| Feature | Built With |
|---|---|
| Parse CLI arguments | mri |
| Interact with the CLI | Inquirer.js |
| Execute commands | commandland |
| JSON and text store | dot-store |
npm install --save-dev task-envtouch run
chmod +x run#!/usr/bin/env node
require("task-env")({
args: process.argv.slice(2),
tasks: [
{
sayHello: ({ hello }) => {
console.log(">", hello)
},
},
],
})./run sayHello --hello=hi
> hiExport task:
export function sayHello({ hello }) {
console.log(hello)
}Require task:
#!/usr/bin/env node
require("task-env")({
args: process.argv.slice(2),
tasks: [require("./say-hello")],
})export async function happy({ ask }) {
let { happy } = await ask([
{
type: "confirm",
name: "happy",
message: "Are you happy?",
},
])
}See the Inquirer.js prompt docs for available options.
export function sayHello({ tasks }) {
tasks.say({ text: "hello" })
}
export function say({ text }) {
console.log(">", text)
}Calling through tasks binds the CLI arguments and helper functions, as if the task were called via CLI.
export async function ls({ run }) {
await run("ls", ["/"])
}See the commandland docs for available options.
Task env uses dot-store to provide an immutable store with atomic filesystem persistence.
Create a directory with some JSON files:
{
"users": {
"bob": {
"key": "~/.ssh/bob_rsa"
}
}
}The stores option allows you to define multiple named stores:
#!/usr/bin/env node
require("task-env")({
args: process.argv.slice(2),
stores: {
config: {
pattern: "**/*",
root: __dirname,
},
},
tasks: [require("./tasks/user")],
})Within your task, get and set JSON using dot-style property strings:
export async function user({ config, name, key }) {
if (key) {
await config.set(`users.${name}.key`, key)
}
console.log(">", config.get(`users.${name}`))
}Run via CLI:
./run user --name=bob --key=~/.ssh/id_rsa
> { key: "~/.ssh/id_rsa" }| Option | Example | Purpose |
|---|---|---|
| alias | {h: ["help"]} |
CLI arguments aliases |
| preSetup | [config=>config] |
Pre-setup functions (before argv parsing) |
| setup | [config=>config] |
Setup functions |
| stores | {store: {root: __dirname, pattern: "**/*"}} |
Store configurations |
| teardown | [args=>{}] |
Teardown functions |
| tasks | [{ task: ({})=>{} }] |
Task functions |