Code Monkey home page Code Monkey logo

node-cli's Introduction

@axiosleo/cli-tool

English | 简体中文

NPM version npm download CI Build Status License FOSSA Status

Design for quickly developing CLI applications using Node.js

See detail usage from wiki

Installation

npm install @axiosleo/cli-tool

Quickly initialize application

npm 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.js

Usage

Start application

const { 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();

Run single command

  • 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>");

Use locales

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

Command Class Example

'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;

License

This project is open-sourced software licensed under the MIT.

FOSSA Status

node-cli's People

Contributors

axiosleo avatar bigshans avatar fossabot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.