Breaking

NodeJS Command Line Interface | Making a CLI with NodeJS and Express

 


Project Layout

Create a folder that will be root folder (suggested name node-cli). Inside that folder create three more folder bin, commands, data. now create all file according to project flow image at the top


bin/player.js


#!/usr/bin/env node


// SUPER COMMANDS 
const program = require('commander');

program
    .version('1.1.1')
    .command("show", "Show all players")
    .command("set", "add or remove player")
    .parse(process.argv);

// console.log("hello from player");


bin/player-set.js
 
// SUB COMMANDS
// console.log("Add or remove players");
const Set = require('../commands/Set');

const set = new Set();


const program = require("commander");

program.command('add').description("Add player informations").action( set.addPlayer);
program.command('remove').description("remove player informations").action(set.removePlayer);


program.parse(process.argv);


bin/player-show.js
 
// SUB COMMANDS
const program = require('commander');
const colors = require('colors');
const all_player  = require('../data/player-data');
// const 
console.log(all_player);


commands/Set.js
 
const inquirer = require('inquirer');
const colors = require('colors');
const playerData = require('../data/player-data');


class Set {
    addPlayer = async () => {
        console.log("Adding player to the player set");
        let newPlayer = await inquirer.prompt([
            {
                type: 'input',
                name: "name",
                message: "Enter player name! ==> ".cyan
            },
            {
                type: 'list',
                name: "game",
                message: "Enter the game of the player! ==> ".cyan,
                choices: ["Cricket", "Football"]
                // choices[, default, filter, loop]
            },
        ]);
        playerData.push(newPlayer);
        playerData.forEach((pd_value, pd_index) => console.log(pd_index, pd_value));
    }


    removePlayer = async () => {
        console.log(playerData.length);
        playerData.forEach((pd_value, pd_index) => console.log(pd_index, pd_value));
        let indexNum = await inquirer.prompt([{
            type: 'number',
            name: "player",
            message: "Enter the index number which you want to remove! ==> ".cyan
        }]);
        // console.log(indexNum.player);
        playerData.splice(indexNum.player, 1);
        console.log("-------------------");
        playerData.forEach((pd_value, pd_index) => console.log(pd_index, pd_value));
    }
}


module.exports = Set;


data/player-data.js
 
const all_player = [
    {
        name: "Virat Kohli",
        game: "Cricket"
    },
    {
        name: "Gayle",
        game: "Cricket"
    },
    {
        name: "AB DE Villiers",
        game: "Cricket"
    },
    {
        name: "Lionel Messi",
        game: "Football"
    },
    {
        name: "Cristiano Ronaldo",
        game: "Football"
    },
    {
        name: "Neymar JR",
        game: "Football"
    },
];

module.exports = all_player;


package.json
 
{
  "name": "player",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "bin": "./bin/player.js",
  "dependencies": {
    "colors": "^1.4.0",
    "commander": "^6.2.0",
    "inquirer": "^7.3.3"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Open terminal or command prompt in root folder and run essential commands
 npm install
npm link
sudo npm link


Now you are able to run commands of node.js cli
 player --version
player --help 
player show
player set
player set add
player set remove

No comments:

Powered by Blogger.