[Tools] Create a Simple CLI Tool in Node.js with CAC

Command-line tools can help you with all sorts of tasks. This lesson covers the very basics of setting up a CLI tool in Node.js by creating your project with npm, setting up your bin script, and using CAC to parse a single argument.


Create a new project, change the "name" porp‘s value to "hi", then add a "bin" prop, so next time, when we invoke "hi", it will run the command in "bin".


{ "name": "hi", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "bin": "./index.js", "devDependencies": { "cac": "6.3.12" }}



npm i -D cac


Create index.js file:

  • Make sure you have ‘
    #!/usr/bin/env node

    ‘ on the top of the file, then it knows should run in node env.

  • Using cac to build commad, you can define ‘option‘, ‘command‘
  • Last you should always call cli.parse() to run the command
#!/usr/bin/env nodeconst cli = require(cac)();cli.option(--type <type>, Provide type, [date|foo])// name is a required fieldcli.command(<name>, Provide your name) .action((name, options) => { const {type} = options; if (type === date) { console.log(`Hi ${name}, Today is ${new Date().toDateString()}`) } else if (type === foo) { console.log(`Hi ${name}, you should take a rest!`) } else { console.log(`Hi ${name}, Good job!`) } })cli.help()// Display version number when `-h` or `--help` appearscli.version(0.0.0)cli.parse()