description |
---|
Armando una CLI con Node.js |
{% hint style="warning" %} 🧙♂Requisitos
- Editor de texto (VScode, Sublime, Atom, Vim 👀, etc)
- Node instalado
- Ganas de aprender 🤯 {% endhint %}
- Inicializaremos nuestro proyecto con npm.
- Instalamos las dependencias necesarias.
- Crearemos un archivo llamado
cli.js
que será el que tendrá toda la lógica de nuestra CLI. - Por cada paso de los proyectos vamos a hacer una introducción a cada tema.
- Strings, arrays y objetos.
- Como definir e invocar funciones.
- Cómo usar forEach para recorrer un array.
- Cómo definir constantes usando const y variables usando let.
- Cómo utilizar async/await para obtener datos de una API.
- Cómo utilizar axios.
- Cómo utilizar cheerio ****para scraping.
{% tabs %} {% tab title="1. Inicializamos nuestro proyecto" %} {% hint style="success" %}
- Trabajando con npm registry
- const {% endhint %}
- Creamos una carpeta llamada
javascript101
. - Nos paramos en esa carpeta y abrimos nuestra terminal.
- Vamos a inicializar nuestro proyecto utilizando
$ npm init -y
👉🏻Para saber más sobre el comando ****https://docs.npmjs.com/cli/init****
{% hint style="info" %} Este comando nos brinda opciones para configurar nuestro proyecto, para conocer un poco más sobre estas configuraciones te recomendamos la documentación oficial https://docs.npmjs.com/files/package.json**** {% endhint %}
Gracias a npm vamos a tener disponible una larga lista de paquetes o módulos de Node para sumar a nuestro proyecto.
Para entender un poco más acerca de esto te recomendamos que leas la documentación oficial de npm registry 👉🏻https://docs.npmjs.com/about-packages-and-modules
- Agreguemos como dependencia a axios para poder hacer un request GET ****y obtener la página de nerdearla.
$ npm i axios
- Vamos a necesitar cheerio para iniciar con nuestro scraping y obtener elementos de manera similar que lo hacemos con jQuery.
$ npm i cheerio
- Instalemos también nodemon ****como dependencia de desarrollador para estar escuchando los cambios en nuestro JS y volver a ejecutar Node.js sobre el mismo
$ npm i -D nodemon
Para poder utilizar las dependencias que instalamos anteriormente vamos a ir a nuestro archivo .js y ****cargarlas:
{% code-tabs %} {% code-tabs-item title="cli.js" %}
const axios = require('axios');
const cheerio = require('cheerio');
{% endcode-tabs-item %} {% endcode-tabs %} {% endtab %}
{% tab title="2. Sumandole lógica a nuestra CLI" %} {% hint style="success" %}
- Arrow functions
- Async/await {% endhint %}
- Antes de empezar a cranear nuestra CLI veamos algunos conceptos importantes que necesitamos tener en cuenta para seguir
- Las arrow functions o funciones nos permiten reducir código y trabajar con funciones de manera más amigable. También se las conoce como anónimas.
(param1, param2, …, paramN) => { sentencias }
(param1, param2, …, paramN) => expresion
() => { sentencias }
const elementos = [
"Hidrógeno",
"Helio",
"Litio",
"Berilio"
];
elementos.map(function(elemento){
return elemento.length;
}); // [8, 6, 7, 9]
elementos.map((elemento) => {
return elemento.length;
}); // [8, 6, 7, 9]
elementos.map(({length}) => length); // [8, 6, 7, 9]
{% hint style="info" %} Para conocer un poco más sobre arrow functions te recomendamos este link de MDN 💛
👉🏻Arrow functions {% endhint %}
- Las funciones
async
/await
nos hacen la vida más fácil a la hora de trabajar con el uso asíncrono de promesas en Javascript.
async function name([param[, param[, ... param]]]) {
statements
}
async function functionName (arguments) {
// Do something asynchronous
}
const functionName = async (arguments) => {
// Do something asynchronous
}
- Cuando manejamos promesas solemos utilizar
then
, en este caso la sentenciaawait
nos permite "esperar" a que esta promesa se resuelva para seguir con el proceso ya que nos retorna el parámetro que se pasa en elthen
.
// then
const getOne = async () => {
return 1;
}
getOne()
.then(value => {
console.log(value); // 1
})
// await
const test = async () => {
const one = await getOne()
console.log(one) // 1
}
test()
- Vamos a crear una función
main()
para poder correr nuestra cli principal.
{% code-tabs %} {% code-tabs-item title="cli.js" %}
const axios = require('axios');
const cheerio = require('cheerio');
const main = async () => {};
main();
{% endcode-tabs-item %} {% endcode-tabs %}
- Dentro de nuestra función vamos a hacer un GET con axios para obtener el HTML de la agenda de nerdearla que vive en https://nerdear.la/agenda/ {% endtab %} {% endtabs %}