Skip to main content

Build a NodeJs command line app with Yargs Introduction

So today, we are going to build a simple command line app that echoes a message supplied to the apps default argument. We are going to use Yargs to accomplish it.

Requirements

Nodejs and Npm.

Prerequisities.

To start and fully understand this tutorial, you need to have the knowledge of :

  1. Javascript (ES6)
  2. NodeJS

Setting up our project.

Lets start this tutorial now. So i'll name the command line app name laisi. We'll create a folder named laisi and initialize it with npm.

mkdir laisi && cd laisi && npm init -y

Edit your package.json

{
  "name": "laisi",
  "version": "1.0.0",
  "description": "Simple command line app",
  "main": "index.js",
  "keywords": [],
  "author": "Abdulazeez Abdulazeez Adeshina <laisibizness@gmail.com> (http://twitter.com/kvng_zeez)",
  "license": "MIT",
  "dependencies": {
    "yargs": "^10.0.3"
  }

Writing our app.

We'll create a new file index.js and add this to it:

#!/usr/bin/env node

The code above tells the app that its a command line app such that it can be run from any angle. :) After that, we require yargs and set it up.

const argv = require('yargs')
    .usage('Usage: $0 option message \n e.g $0 -s message')
    .alias('s', 'message')
    .nargs('s', 1)
    .describe('s', 'Say message')
    .demandOption(['s'])
    .help('h')
    .alias('h', 'help')
    .epilog('Copyright Abdul 2017')
    .argv

Code Explanation

  1. The .usage is responsible for displaying the instructions on how to make use of our app. The $0 there represents the name of the file where our code is stored i.e index.js.

  2. The .alias defines the default argument -s which our messages will be supplied upon.

  3. The .nargs simply means the number of arguments -s can take and its set to 1.

  4. The.describe further explains the -s argument.

  5. The .demandOption makes sure the argument is supplied.

  6. The .help displays the option again.

Logging out message passed.

To log the message supplied to the argument to the console, we'll add this to the end of our index.js

console.log(argv.s);

Making it fully command line.

To make our app fully command line, we'll make our index.js executable with the command:

chmod +x index.js

and add this to your package.json

"bin": {
    "laisi": "./index.js"
  }

After that, we'll link our app to make it available globally

sudo npm link

Upon using the command above, we have our app as a command line. To verify our process, call our app from the command line

laisi

and you should get this screen.

This is image title

After that, we can now install our app with the command :

sudo npm i -g

Conclusion

Comments

Popular posts from this blog

How to use Ngx-Charts in Angular ?

Charts helps us to visualize large amount of data in an easy to understand and interactive way. This helps businesses to grow more by taking important decisions from the data. For example, e-commerce can have charts or reports for product sales, with various categories like product type, year, etc. In angular, we have various charting libraries to create charts.  Ngx-charts  is one of them. Check out the list of  best angular chart libraries .  In this article, we will see data visualization with ngx-charts and how to use ngx-charts in angular application ? We will see, How to install ngx-charts in angular ? Create a vertical bar chart Create a pie chart, advanced pie chart and pie chart grid Introduction ngx-charts  is an open-source and declarative charting framework for angular2+. It is maintained by  Swimlane . It is using Angular to render and animate the SVG elements with all of its binding and speed goodness and uses d3 for the excellent math functio...

Understand Angular’s forRoot and forChild

  forRoot   /   forChild   is a pattern for singleton services that most of us know from routing. Routing is actually the main use case for it and as it is not commonly used outside of it, I wouldn’t be surprised if most Angular developers haven’t given it a second thought. However, as the official Angular documentation puts it: “Understanding how  forRoot()  works to make sure a service is a singleton will inform your development at a deeper level.” So let’s go. Providers & Injectors Angular comes with a dependency injection (DI) mechanism. When a component depends on a service, you don’t manually create an instance of the service. You  inject  the service and the dependency injection system takes care of providing an instance. import { Component, OnInit } from '@angular/core'; import { TestService } from 'src/app/services/test.service'; @Component({ selector: 'app-test', templateUrl: './test.component.html', styleUrls: ['./test.compon...

How to solve Puppeteer TimeoutError: Navigation timeout of 30000 ms exceeded

During the automation of multiple tasks on my job and personal projects, i decided to move on  Puppeteer  instead of the old school PhantomJS. One of the most usual problems with pages that contain a lot of content, because of the ads, images etc. is the load time, an exception is thrown (specifically the TimeoutError) after a page takes more than 30000ms (30 seconds) to load totally. To solve this problem, you will have 2 options, either to increase this timeout in the configuration or remove it at all. Personally, i prefer to remove the limit as i know that the pages that i work with will end up loading someday. In this article, i'll explain you briefly 2 ways to bypass this limitation. A. Globally on the tab The option that i prefer, as i browse multiple pages in the same tab, is to remove the timeout limit on the tab that i use to browse. For example, to remove the limit you should add: await page . setDefaultNavigationTimeout ( 0 ) ;  COPY SNIPPET The setDefaultNav...