Qué es:
Quickjs es un entorno de ejecución (motor) de javascript que cumple en gran medida con el estandar de javascript.
Sirve para interpretar, ejecutar o compilar codigo javascript.
Cómo se compara a Node.js y a Chrome:
Quickjs es mucho más pequeño que node o v8. Se ejecuta de forma rápida sin esperar al cargar scripts y ocupa poco espacio, lo que lo hace ideal para crear pequeños scripts y utilidades para la consola de comandos de Linux, Windows o Termux.
Como se instala:
Puedes descargarlo de su página oficial, de github y compilarlo o utilizando apt-get install quickjs
A parte del javascript estandar que más trae:
Trae 2 librerías preinstaladas que podemos importar. std y os.
La librería std trae varias funciones del lenguaje de C y la librería os trae hilos, funciones para abrir procesos, y varias utilidades.
Al lio:
holaMundo.js
Código
console.log("Hola mundo");
Puedes ejecutarlo con el comando qjs holaMundo.js
También puedes compilarlo con qjsc -o holaMundo holaMundo.js
correrCualquierComando.js
Código
import * as std from "std"; let run = comando => { let prog = std.popen(comando, "r"); let r, msg = ""; while ((r = prog.getline()) != null) { msg += r + "\n"; } return msg; } console.log( run("ls") ); console.log( run("ls && pwd") );
generadorDeArchivos.js
Código
import * as std from "std"; console.log(`Generador de archivos 2021 Genera el esqueleto de archivos para no tener que escribir a mano partes recurrentes de archivos comunes. 1. Proyecto HTML 2. Reporte de Seguridad Selecciona el número correspondiente a la opción que deseas.`); let opcionUsuario = +std.in.getline(); if (opcionUsuario === 1) { let fd = std.open("index.html", "w"); fd.puts(`<!DOCTYPE html> <html lang="en"> <head prefix="og:http://ogp.me/ns#"> <meta charset="utf-8"> <link rel="icon" href="data:;base64,iVBORw0KGgo="> <title>Index.html</title> <!-- <meta property="og:type" content="website"> --> <link rel="stylesheet" href="./code.css"> <meta name="theme-color" content="#ffffff"> </head> <body> <script src="./main.js"></script> </body> </html>`); fd.close(); fd = std.open("main.js", "w"); fd.close(); fd = std.open("code.css", "w"); fd.puts(`body { margin: 0 0 0 0; /* Remove ugly left side border */ text-size-adjust: none; /* Fix Android Big Text */ text-rendering: optimizeLegibility; /* Improve text */ } /* Media query */ @media (min-width: 0px) and (orientation:landscape) { body { font-size: 1.1vw; } }`); fd.close(); } else if (opcionUsuario === 2) { console.log("Esta opción se programará en el futuro"); }
scraper.js
Código
import * as std from "std"; let run = comando => { let prog = std.popen(comando, "r"); let r, msg = ""; while ((r = prog.getline()) != null) { msg += r + "\n"; } return msg; } let getTargetAndSelector = () => { let returnValues = {}; for(let i in scriptArgs) { if (scriptArgs[i] == "-t" || scriptArgs[i] == "--target") { returnValues.target = scriptArgs[+i+1]; } else if (scriptArgs[i] == "-s" || scriptArgs[i] == "--selector") { returnValues.selector = scriptArgs[+i+1]; } } if (returnValues.target && returnValues.selector) { return [returnValues.target, returnValues.selector]; } else { throw `Usage: -t --target Url to download -s --selector Selector to use Example: qjs scraper.js -t https://example.com -s h1`; } } let result = run(`curl ${getTargetAndSelector()[0]} -A "Mozilla/5.0" --silent | pup ${getTargetAndSelector()[1]}`); console.log(result);
Puedes compilarlos y meterlos en bin y darle permisos para usarlos como cualquier otro comando sin necesidad de estar en la misma carpeta que el código.
qjsc -o scraper scraper.js && cp scraper ~/../usr/bin/ && chmod +775 ~/../usr/bin/scraper
scraper -t https://example.com -s a
Documentación Official Quickjs: https://bellard.org/quickjs/quickjs.html
Documentación Herramienta Pup para usar selectores en la linea de comandos: https://github.com/ericchiang/pup