<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Munaib Hussain</title>
    <description>The latest articles on DEV Community by Munaib Hussain (@munaibh).</description>
    <link>https://dev.to/munaibh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F152974%2Fe5d9c5f1-8416-4950-9e98-6508d24c56ba.jpeg</url>
      <title>DEV Community: Munaib Hussain</title>
      <link>https://dev.to/munaibh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/munaibh"/>
    <language>en</language>
    <item>
      <title>So you want to Node more about NPM.</title>
      <dc:creator>Munaib Hussain</dc:creator>
      <pubDate>Sat, 13 Jun 2020 18:03:33 +0000</pubDate>
      <link>https://dev.to/munaibh/so-you-want-to-node-more-about-npm-32i</link>
      <guid>https://dev.to/munaibh/so-you-want-to-node-more-about-npm-32i</guid>
      <description>&lt;p&gt;Let's have some hands on time with Node/NPM by making a simple project using an Animal Crossing API! But, before we get into it, let's answer some common questions.&lt;/p&gt;

&lt;p&gt;If you prefer to read and then follow along, a quick code run through (in complete silence) is available &lt;a href="https://www.youtube.com/watch?v=Q2ML4gyTeyw"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Q2ML4gyTeyw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What is NPM and Why do we need it?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/"&gt;NPM&lt;/a&gt; (Node Package Manager) is an online software registry where open source developers can share their software for others to install and use (these are called "packages"). NPM also comes with a bunch of cli commands we can use in our terminal (we'll be using these commands throughout this project, for the full juicy list go &lt;a href="https://docs.npmjs.com/cli-documentation/cli"&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;But, why? Picture this... you're writing code, making something like us right now, but there's a lot to do. Though, why do everything? When we can leverage other peoples magic to make our lives easier, rather than build everything from scratch. These packages have been created and uploaded by others to npm ripe for our usage (we'll be using a couple to save time and effort).&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;There are a few things that you're going to need before we dive in and start the glorious process of learning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability to gloss over grammatical and spelling errors &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=RH1ekuvSYzE"&gt;Internet and a Computer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt; or your favourite editor&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/download/"&gt;Node &amp;amp; NPM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Creating your project
&lt;/h2&gt;

&lt;p&gt;Firstly, create a directory to house your project (name it whatever). For this example, I am going to create a new directory called "acnh". Very readable.&lt;/p&gt;

&lt;p&gt;Go into that folder and type the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This will ask you a bunch of questions and then create a &lt;code&gt;package.json&lt;/code&gt;. If you don't know answers to certain questions, that's fine. We can modify this file as we see fit later, it's just JSON. Bonus: The output from this commands gives a lot of learning tips!&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install &amp;lt;pkg&amp;gt;` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (acnh) 
version: (1.0.0) 0.0.1
description: A node cli to hit an Animal Crossing API.
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: Tom Nook
license: (ISC) 
About to write to /Users/nook/projects/acnh/package.json:

{
  "name": "acnh",
  "version": "0.0.1",
  "description": "A node cli to hit an Animal Crossing API.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1"
  },
  "author": "Tom Nook",
  "license": "ISC"
}


Is this OK? (yes) yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Sweet! Now we have a Node/Npm project. We should be seeing a &lt;code&gt;package.json&lt;/code&gt; in our project. If you're wondering what the purpose of this is, the official Node docs, give a great &lt;a href="https://nodejs.org/en/knowledge/getting-started/npm/what-is-the-file-package-json/"&gt;overview&lt;/a&gt;, here's a snippet:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All npm packages contain a file, usually in the project root, called package.json - this file holds various metadata relevant to the project. This file is used to give information to npm that allows it to identify the project as well as handle the project's dependencies.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Installing our dependencies
&lt;/h2&gt;

&lt;p&gt;As mentioned before we're gonna piggyback of some other peoples cool work by installing some packages using the command &lt;code&gt;npm install &amp;lt;package&amp;gt;&lt;/code&gt;. This also takes two optional flags &lt;code&gt;--save&lt;/code&gt; or &lt;code&gt;--save-dev&lt;/code&gt;. The former adds the package in a &lt;code&gt;dependencies&lt;/code&gt;key and the latter adds it to the &lt;code&gt;devDependencies&lt;/code&gt; key in our &lt;code&gt;package.json&lt;/code&gt;. What's the difference you say?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If someone is planning on downloading and using your module in their program, then they probably don't need all the fluff we install to make our development easier. In production only the dependencies will be installed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Keep an eye on your &lt;code&gt;package.json&lt;/code&gt; as we install the following our dependencies using the command below:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save&lt;/span&gt; node-fetch
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Our &lt;code&gt;package.json&lt;/code&gt; should now look meatier, and we should also now have a &lt;code&gt;node_modules&lt;/code&gt; folder with all our packages inside (we'll reference the stuff inside this later). We simply installed &lt;code&gt;node-fetch&lt;/code&gt; which will be used to grab data from our api.&lt;/p&gt;


&lt;h2&gt;
  
  
  Writing basic some code!
&lt;/h2&gt;

&lt;p&gt;Next open this project up in your editor and create &lt;code&gt;index.js&lt;/code&gt;, this will hold our core code. In this file add the following:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cp"&gt;#!/usr/bin/env node
&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-fetch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`http://acnhapi.com/v1/fish/oarfish`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;catch-phrase&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nothing found.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;#!/usr/bin/env node&lt;/code&gt; is known as a &lt;a href="https://bash.cyberciti.biz/guide/Shebang"&gt;shebang&lt;/a&gt; and hints how to execute this Node script (it's only really needed when we're running scripts in the terminal, which we are). Next, the &lt;code&gt;require&lt;/code&gt; statement allows us to pull in the &lt;code&gt;node-fetch&lt;/code&gt; package we installed from &lt;code&gt;npm&lt;/code&gt; (which is stored in the &lt;code&gt;node_modules&lt;/code&gt; folder) and assign it to a variable for usage. Next, we use the fetch method to hit our api, parse the json and log it to our console (an example response is &lt;a href="http://acnhapi.com/v1/fish/oarfish"&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Now let's run this bad boy, make sure you're in the directory and run the command below to see the quote I hate the most.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Writing bonus code!
&lt;/h2&gt;

&lt;p&gt;Hitting the same endpoint is boring, luckily we can pass parameters to our node script e.g. if I ran &lt;code&gt;node index.js bug tarantula&lt;/code&gt;. All these values are available in a globally accessible array called &lt;code&gt;process.argv&lt;/code&gt;. Therefore let's update our script to use this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cp"&gt;#!/usr/bin/env node
&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node-fetch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`http://acnhapi.com/v1/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;catch-phrase&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nothing found.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Boom! Now our &lt;code&gt;fetch&lt;/code&gt; request is powered off these variables and our script is a lot more cooler. We're pretty much done with code, below are some example commands based of the &lt;a href="http://acnhapi.com/doc"&gt;api&lt;/a&gt;!&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;node index.js fish oarfish
node index.js bugs tarantula
node index.js bugs common_butterfly
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  NPM Scripts
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;npm&lt;/code&gt; has support for the &lt;code&gt;scripts&lt;/code&gt; property in &lt;code&gt;package.json&lt;/code&gt;, we can define reusable scripts here and we can run them in the terminal like so: &lt;code&gt;npm run &amp;lt;command&amp;gt;&lt;/code&gt;. The &lt;code&gt;scripts&lt;/code&gt; object can have multiple definitions. Let's add one so we don't have to run &lt;code&gt;node index.js&lt;/code&gt; every time.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"acnh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A node cli to hit an Animal Crossing API."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"acnh"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node index.js"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and voila now we can run &lt;code&gt;npm run acnh&lt;/code&gt; instead of &lt;code&gt;node index.js&lt;/code&gt;. I'll stick an updated list of the example commands above here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run acnh fish oarfish
npm run acnh bugs tarantula
npm run acnh bugs common_butterfly
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Some takeaways
&lt;/h2&gt;

&lt;p&gt;The idea is to not commit the &lt;code&gt;node modules&lt;/code&gt; folder as the package.json (and &lt;a href="https://docs.npmjs.com/configuring-npm/package-lock-json.html"&gt;package-lock.json&lt;/a&gt;) are used to keep track of our dependencies, so whenever we start fresh we can just run &lt;code&gt;npm install&lt;/code&gt; to get all our packages again.&lt;/p&gt;

&lt;p&gt;Whilst node magically resolves &lt;code&gt;node-fetch&lt;/code&gt; in &lt;code&gt;require&lt;/code&gt; statement and grabs it from the &lt;code&gt;node_modules&lt;/code&gt; directory. We can also split our code up and require local files. You can read more about that &lt;a href="https://nodejs.org/en/knowledge/getting-started/what-is-require/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to learn more about making your code available on &lt;code&gt;npm&lt;/code&gt; yourself. Definitely check out this article (straight to the point):&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/pgarciacamou" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--paC94IaN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--0KPgvO2o--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/198975/f22e72e2-4fc9-4200-917d-722b77b67046.jpeg" alt="pgarciacamou image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/pgarciacamou/creating-a-cli-tool-using-nodejs-and-npm-315" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Creating a CLI tool using NodeJS and npm.&lt;/h2&gt;
      &lt;h3&gt;Pablo Garcia ・ Aug  6 '19 ・ 3 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#node&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#npm&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#npx&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;






&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1Wg2pLfc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://memegenerator.net/img/instances/67583201/all-done-dude.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Wg2pLfc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://memegenerator.net/img/instances/67583201/all-done-dude.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>npm</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
