En este momento estás viendo Uso de Node.js para crear CLI potentes, atractivas y fáciles de usar

Uso de Node.js para crear CLI potentes, atractivas y fáciles de usar

Uso de Node.js para crear CLI potentes, atractivas y fáciles de usar

No todas las aplicaciones de Node.js están destinadas a vivir en la web; Node.js es un tiempo de ejecución popular que le permite escribir múltiples tipos de aplicaciones que se ejecutan en una variedad de plataformas, desde la nube hasta muchos dispositivos IoT. Naturalmente, Node.js también puede ejecutarse en su shell local, donde las poderosas herramientas pueden hacer magia, ejecutando tareas útiles que mejoran sus capacidades de desarrollador.

Una interfaz de línea de comandos (CLI) puede realizar cualquier cosa, desde una operación simple, como imprimir arte ASCII en la terminal como yosay , hasta generar completamente el código para un proyecto basado en sus elecciones usando múltiples plantillas como Yeoman yo . Estos programas pueden instalarse globalmente desde npm o ejecutarse directamente usando npxsi son lo suficientemente simples.

Exploremos los conceptos básicos de la creación de una CLI simple con Node.js. En este ejemplo, estamos creando un comando simple que recibe un nombre como argumento que muestra un emoji y un saludo.

Lo primero que debes hacer como en toda aplicación es crearle una carpeta y ejecutar:

$ npm init

El comando anterior solicitará información como el nombre del paquete, la versión, la licencia y otros creando package.jsonal final, con este aspecto:

{
  "name": "hello-emoji",
  "version": "1.0.0",
  "description": "A hello world CLI with a nice emoji",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "edsadr",
  "license": "MIT"
}

Como queremos que nuestra CLI esté disponible como un comando, necesitamos configurar nuestro package.jsonpara tratar nuestro programa así, para hacerlo agregamos una binsección como esta:

"bin": {
  "hello-emoji": "./index.js"
}

En este caso, hello-emojies el comando que estamos registrando para ejecutar nuestro programa, y ./index.jses el archivo que se ejecutará cuando se invoque el comando.

Para mostrar emojis, agreguemos un paquete:

$ npm install node-emoji -S

Ahora, vamos a crear el archivo a ejecutar index.js:

#!/usr/bin/env node
'use strict'

const emojis = require('node-emoji')

if (!process.argv[2]) {
  console.error(`${emojis.get('no_entry')} Please add your name to say hello`)
  process.exit(1)
}

console.log(`${emojis.random().emoji}  Hello ${process.argv['2']}!`)

Tenga en cuenta que agregamos #!/usr/bin/env nodeen la parte superior. Esto le dice al sistema a qué intérprete pasar ese archivo para su ejecución; en nuestro caso el intérprete es Node.js. Después de eso, el código es bastante sencillo. Requiere el node-emojimódulo y valida process.argv[2], que es el primer argumento colocado por el usuario. De forma predeterminada process.argv[0], es la ruta para el binario de Node.js y process.argv[1]es la ruta para el script que se está ejecutando.

Después de agregar este código, nuestro comando está listo para ser ejecutado; puedes obtener un ‘¡Hola mundo!’ en tu consola ejecutando:

$ node index.js world

Si desea ejecutarlo con el comando especificado en la sección bin de nuestro package.json, deberá instalar el paquete globalmente desde npm. Pero solo con fines de desarrollo para ejecutarlo localmente, podemos usar:

$ npm link

Después de ejecutar este comando, puede intentar ejecutar:

$  hello-emoji world

Análisis de argumentos

Después de examinar el código que acabamos de escribir, probablemente se dará cuenta de que el problema principal al escribir este tipo de aplicación es controlar la entrada del usuario analizando los argumentos incluidos en la ejecución del comando. Afortunadamente, el ecosistema npm ofrece muchas opciones para resolver este problema.

Aquí hay algunos módulos que lo ayudan a analizar los argumentos ingresados ​​​​por el usuario. Algunos incluso brindan algunas pautas para estructurar el código de su CLI:

Estos paquetes le permiten crear una CLI compatible con múltiples operaciones e incluir parámetros; podría estructurar eficientemente algo para que nuestra CLI haga cosas como:

$ hello-emoji --name=world --json

Imprimiendo un objeto JSON con nuestro saludo

$ hello-emoji --name=world --emoji=coffee

En lugar de un emoji aleatorio, este imprime el emoji de café.

Aquí hay un ejemplo que implementa minimist para hacer el análisis para ejecutar comandos como los anteriores:

#!/usr/bin/env node

'use strict'

const emojis = require('node-emoji')
const minimist = require('minimist')
const opts = minimist(process.argv.slice(2))

const emoji = opts.emoji ? emojis.get(opts.emoji) : emojis.random().emoji

if (!opts.name) {
  console.error(`${emojis.get('no_entry')} Please add your name to say hello using the '--name=' parameter`)
  process.exit(1)
}

if (!emojis.has(opts.emoji)) {
  console.error(`${opts.emoji} is not a valid emoji, please check https://www.webfx.com/tools/emoji-cheat-sheet/`)
  process.exit(1)
}

const greeting = `${emoji}  Hello ${opts.name}!`

if (opts.json) {
  console.log(JSON.stringify({greeting}))
} else {
  console.log(greeting)
}

Ir interactivo

Hasta ahora, hemos estado trabajando con información proveniente de la ejecución del comando. Sin embargo, también hay otra forma de ayudar a que su CLI sea más interactiva y solicite información en el momento de la ejecución. Estos módulos pueden ayudar a crear una mejor experiencia para el usuario:

Con un paquete como los anteriores, puede pedirle al usuario directamente que ingrese la información deseada en muchos estilos diferentes. El siguiente ejemplo se utiliza inquirerpara pedir a los usuarios el nombre si no se incluyó como argumento. También valida el emoji y solicita uno nuevo si la entrada no es válida.

#!/usr/bin/env node

'use strict'

const emojis = require('node-emoji')
const inquirer = require('inquirer')
const minimist = require('minimist')
const opts = minimist(process.argv.slice(2))

let emoji = opts.emoji ? emojis.get(opts.emoji) : emojis.random().emoji

async function main () {
  if (!opts.name) {
    const askName = await inquirer.prompt([{
      type: 'input',
      name: 'name',
      message: `Please tell us your name: `,
      default: () => 'world',
      validate: (answer) => answer.length >= 2
    }])

    opts.name = askName.name
  }

  if (opts.emoji && !emojis.hasEmoji(opts.emoji)) {
    console.error(`${opts.emoji} is not a valid emoji, please check https://www.webfx.com/tools/emoji-cheat-sheet/`)
    const askEmoji = await inquirer.prompt([{
      type: 'input',
      name: 'emoji',
      message: `Please input a valid emoji: `,
      default: () => 'earth_americas',
      validate: (emoji) => emojis.hasEmoji(emoji)
    }])

    emoji = emojis.get(askEmoji.emoji)
  }

  const greeting = `${emoji}  Hello ${opts.name}!`

  if (opts.json) {
    console.log(JSON.stringify({
      greeting
    }))
  } else {
    console.log(greeting)
  }
}

main()

Agregando un poco de Eye Candy

Incluso si la interfaz para este tipo de aplicación se reduce a lo que puede tener en un shell, no significa que la interfaz de usuario deba verse mal. Hay muchas herramientas que pueden ayudar a que sus aplicaciones se vean bien; aquí hay algunas bibliotecas diferentes que agregarán un toque agradable a la apariencia de su salida CLI:

  • Chalk o Colors le permitirán establecer el color de su texto.
  • Para incluir imágenes traducidas a arte ASCII, intente asciify-image o ascii-art
  • Si tiene que generar mucha información, una salida bien organizada podría estar en tablas, pruebe Table o Cli-table
  • Si su CLI requiere procesos que toman algún tiempo, como consumir API externas, consultar bases de datos o incluso escribir archivos, puede agregar una linda ruleta con Ora o Cli-spinner .

Conclusión

Crear CLI fáciles de usar, útiles y hermosos es en parte ciencia y en parte arte. Después de explorar los conceptos básicos de la creación de una herramienta CLI, puede ir y explorar un universo de posibilidades con los paquetes disponibles a través del registro npm. Con suerte, pronto estará creando herramientas funcionales y fáciles de usar que faltan en su inventario actual gracias al poder de Node.js.

En Estrategia Creativa tenemos toda la información que necesitas sobre el mundo de digital y en especial para tus emprendimiento Si quieres seguir leyendo información útil  ¡echa un vistazo a nuestros artículos!

Uso de Node.js para crear CLI potentes, atractivas y fáciles de usar
Guia Uso de Node.js para crear CLI potentes, atractivas y fáciles de usar
Paso a Paso Uso de Node.js para crear CLI potentes, atractivas y fáciles de usar

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)

Deja una respuesta