Task Env
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 |
Install
npm install --save-dev task-env
Create an executable
touch run
chmod +x run
Write some code
#!/usr/bin/env node
require("task-env")({
args: process.argv.slice(2),
tasks: [
{
sayHello: ({ hello }) => {
console.log(">", hello)
},
},
],
})
Run your task
./run sayHello --hello=hi
> hi
Package tasks
Export 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")],
})
Interact
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.
Call other tasks
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.
Execute commands
export async function ls({ run }) {
await run("ls", ["/"])
}
See the commandland docs for available options.
JSON and text store
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" }
All options
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 |