English | 简体中文
Design for quickly developing CLI applications using Node.js
See detail usage from wiki
npm install @axiosleo/cli-toolnpm install @axiosleo/cli-tool -g cli-tool init <app-name> # make command file cli-tool make <command-name> <commands-dir-path> # for example cli-tool make test ./commands/ # will generate command file on ./commands/test.js # run command js script cli-tool exec ./command/test.jsconst { App } = require('@axiosleo/cli-tool'); const app = new App({ name: 'cli-tool', // cli app command name, required version: '1.0.0', // cli app version, required desc: 'cli app description', commands_dir: '/path/to/commands/dir/', // will auto load command files commands_sort: ['help', ... ], commands_group: { 'group description': ['command_name', ...], } }); app.start();- register with command class
const CommandExample = require("/path/to/your/command/file"); app.register(CommandExample); app.exec("<command-name>");- register with command object
const CommandExample = require("/path/to/your/command/file"); const command = new CommandExample(); app.register(command); app.exec("<command-name>");- register with command file path
app.register("/path/to/your/command/file"); app.exec("<command-name>");The "desc" of CLI Application and Command will be automatically translated by using the locales json file.
locales example json file : locales
see detail from locales wiki
const path = require("path"); app.locale({ dir: path.join(__dirname, "../locales"), // /path/to/app/locales/dir sets: ["en-US", "zh-CN"], // cannot be empty, the first set as default. }); app.start(); // set locale before start app"use strict"; const { Command } = require("@axiosleo/cli-tool"); class CommandExample extends Command { constructor() { super({ name: "command-name", desc: "command desc", alias: ["command-alia1", "command-alia2"], }); /** * add argument of current command * @param name argument name * @param desc argument description * @param mode argument mode : required | optional * @param default_value only supported on optional mode */ this.addArgument("arg-name", "desc", "required", null); /** * add option of current command * @param name option name * @param short option short name * @param desc option description * @param mode option mode : required | optional * @param default_value only supported on optional mode */ this.addOption("test", "t", "desc", "required", null); } async exec(args, options, argList, app) { // do something in here // get arg&option by name const arg1 = args.argName; const option1 = options.optionName; // get arg by index const index = 0; const arg2 = argList[index]; // ask for answer const answer = await this.ask("Please input your answer"); // ask for confirm, default value is 'false' const confirm = await this.confirm("Confirm do this now?", false); // select action const action = await this.select("Select an action", ["info", "update"]); // print table const rows = [["Bob", 2]]; const head = ["Name", "Score"]; this.table(rows, head); } } module.exports = CommandExample;This project is open-sourced software licensed under MIT.