Building a Simple CLI Tool with Node.js

Lavesh Katariya

Lavesh Katariya

· 2 min read
Building a Simple CLI Tool with Node.js

Why Build CLI Tools with Node.js?

  1. Cross-Platform Support: Node.js runs on Windows, macOS, and Linux.
  2. Rich Ecosystem: Access to numerous npm packages for added functionality.
  3. Ease of Use: JavaScript simplifies CLI development with intuitive syntax.

Setting Up the Project

Step 1: Initialize a Node.js Project

Create a new directory for your project and initialize it with npm:

mkdir my-cli-tool
cd my-cli-tool
npm init -y

This creates a package.json file with default configurations.

Step 2: Create the Entry Point

Create a file named index.js as the entry point for your CLI tool:

touch index.js

Adding Shebang and Permissions

The shebang (#!) specifies the interpreter for your script. Add the following to the top of index.js:

#!/usr/bin/env node

Make the file executable:

chmod +x index.js

Implementing the CLI Tool

Step 1: Parsing Command-Line Arguments

Use the process.argv array to access arguments passed to your script.

const args = process.argv.slice(2);
console.log('Arguments:', args);

Run the script:

node index.js hello world

Output:

Arguments: [ 'hello', 'world' ]

Step 2: Adding User Input Handling

Use a package like yargs or commander to simplify argument parsing.

Installing yargs

npm install yargs

Implementing with yargs

Update index.js:

#!/usr/bin/env node

const yargs = require('yargs');

yargs.command(
  'greet [name]',
  'Print a greeting message',
  (yargs) => {
    yargs.positional('name', {
      describe: 'Name of the person to greet',
      default: 'World',
    });
  },
  (argv) => {
    console.log(`Hello, ${argv.name}!`);
  }
).help().argv;

Run the tool:

node index.js greet --name=John

Output:

Hello, John!

Publishing the CLI Tool

Step 1: Update package.json

Add a bin field to specify the entry point:

"bin": {
  "my-cli-tool": "index.js"
}

Step 2: Install Locally

Link the package locally for testing:

npm link

Now, you can run the tool globally:

my-cli-tool greet --name=Jane

Step 3: Publish to npm

Publish the tool for global use:

npm publish

Enhancing Your CLI Tool

  1. Input Validation: Use libraries like ajv for robust input validation.
  2. Styling Output: Enhance the user experience with packages like chalk for colored output.
  3. Interactive Prompts: Use inquirer to create dynamic prompts for user input.

Example with chalk:

const chalk = require('chalk');
console.log(chalk.green('Success!'));

By following this guide, you can build and publish powerful CLI tools with Node.js. Expand their capabilities by integrating with APIs, automating workflows, or managing system tasks to make your tools even more impactful.

Lavesh Katariya

About Lavesh Katariya

Innovative Full-Stack Developer | Technical Team Lead | Cloud Solutions Architect

With over a decade of experience in building and leading cutting-edge web application projects, I specialize in developing scalable, high-performance platforms that drive business growth. My expertise spans both front-end and back-end development, making me a versatile and hands-on leader capable of delivering end-to-end solutions.

Copyright © 2025 Lavesh Katariya. All rights reserved.