Building CLI Tools with Node.js: A Practical Guide to Creating Powerful Command-Line Interfaces

javascript dev.to

Building CLI Tools with Node.js: A Practical Guide to Creating Powerful Command-Line Interfaces

As developers, we've all been there - struggling to automate repetitive tasks, dealing with tedious configuration files, or simply wanting to streamline our workflow. That's where command-line interfaces (CLI) come in. A well-crafted CLI tool can save us hours of time, increase productivity, and make our lives easier. In this article, we'll explore how to build CLI tools with Node.js, a popular choice for creating powerful and flexible command-line interfaces.

Setting Up Your CLI Project

Before we dive into the nitty-gritty of building a CLI tool, let's set up a basic project structure. Create a new directory for your project and initialize a new Node.js project using the following command:

mkdir my-cli-tool
cd my-cli-tool
npm init -y
Enter fullscreen mode Exit fullscreen mode

Next, install the yargs package, a popular library for building CLI tools:

npm install yargs
Enter fullscreen mode Exit fullscreen mode

Understanding the Basics of Yargs

yargs provides a simple and intuitive API for parsing command-line arguments. Let's create a basic CLI tool that takes a single argument, --name, and prints a greeting message:

// cli.js
const yargs = require('yargs');

const argv = yargs
  .option('name', {
    alias: 'n',
    type: 'string',
    demandOption: true,
    describe: 'Your name',
  })
  .help()
  .argv;

console.log(`Hello, ${argv.name}!`);
Enter fullscreen mode Exit fullscreen mode

Run the script using node cli.js --name=John to see the output:

Hello, John!
Enter fullscreen mode Exit fullscreen mode

Handling Multiple Arguments and Options

As your CLI tool grows, you'll need to handle multiple arguments and options. yargs makes it easy to do so. Let's update our previous example to include multiple options:

// cli.js
const yargs = require('yargs');

const argv = yargs
  .option('name', {
    alias: 'n',
    type: 'string',
    demandOption: true,
    describe: 'Your name',
  })
  .option('age', {
    alias: 'a',
    type: 'number',
    describe: 'Your age',
  })
  .option('greeting', {
    alias: 'g',
    type: 'string',
    default: 'Hello',
    describe: 'The greeting message',
  })
  .help()
  .argv;

console.log(`${argv.greeting}, ${argv.name}! You are ${argv.age} years old.`);
Enter fullscreen mode Exit fullscreen mode

Run the script using node cli.js --name=John --age=30 --greeting=Hi to see the output:

Hi, John! You are 30 years old.
Enter fullscreen mode Exit fullscreen mode

Creating a CLI Tool with Multiple Commands

One of the most powerful features of yargs is its ability to create multiple commands. Let's create a CLI tool with two commands: add and remove:

// cli.js
const yargs = require('yargs');

const argv = yargs
  .command('add <name>', 'Add a new item', (yargs) => {
    yargs.option('age', {
      alias: 'a',
      type: 'number',
      describe: 'The item\'s age',
    });
  })
  .command('remove <name>', 'Remove an item', (yargs) => {
    yargs.option('force', {
      alias: 'f',
      type: 'boolean',
      describe: 'Force remove the item',
    });
  })
  .help()
  .argv;

if (argv._[0] === 'add') {
  console.log(`Adding item ${argv.name}...`);
  if (argv.age) {
    console.log(`Item ${argv.name} is ${argv.age} years old.`);
  }
} else if (argv._[0] === 'remove') {
  console.log(`Removing item ${argv.name}...`);
  if (argv.force) {
    console.log(`Forced removal of item ${argv.name}.`);
  }
}
Enter fullscreen mode Exit fullscreen mode

Run the script using node cli.js add John --age=30 to see the output:

Adding item John...
Item John is 30 years old.
Enter fullscreen mode Exit fullscreen mode

Run the script using node cli.js remove John --force to see the output:

Removing item John...
Forced removal of item John.
Enter fullscreen mode Exit fullscreen mode

Conclusion

Building CLI tools with Node.js is a powerful way to automate tasks, streamline workflows, and increase productivity. With yargs, you can create flexible and intuitive command-line interfaces that meet the needs of your users. By following the practical advice and code snippets in this article, you'll be well on your way to creating your own CLI tools. Happy coding!

Source: dev.to

arrow_back Back to Tutorials