task-env v2.14.7
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-envCreate an executable
touch run
chmod +x runWrite 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
> hiPackage 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 |
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago