Deno + Tasks = Productividad: todo lo que debes saber
-
Oliver Servín
A medida que nuestra aplicación crece en complejidad, encontraremos más comandos para memorizar: iniciar servidores de desarrollo, crear versiones de producción y ejecutar pruebas, entre otros. Para evitar ejecutar todos estos comandos constantemente en la terminal con deno
, podemos utilizar "tareas" (tasks) - comandos definidos en el archivo deno.json
.
Por ejemplo, podemos definir un comando que ejecute nuestro main.ts
con los permisos necesarios, incluyendo la opción --watch
para actualizaciones automáticas del código.
{ "tasks": { "dev": "deno run --allow-read --watch main.ts" }, "imports": { "@std/assert": "jsr:@std/assert@1", "@std/text": "jsr:@std/text@^1.0.8" }}
Con esta configuración, simplemente ejecutamos deno task dev
en la terminal, haciendo el proceso más eficiente.
#Opciones para ejecutar tareas
Consideremos un archivo main.ts
que utiliza setInterval
:
let i = 0; setInterval(() => { console.log(i); i++;}, 1 * 1000);
La opción --watch
reiniciará automáticamente la tarea cuando modifiquemos el código, ahorrando tiempo y esfuerzo.
Una ventaja clave de Deno es su compatibilidad con scripts de NPM existentes. Si nuestro proyecto tiene un archivo package.json
, podemos ejecutar scripts de NPM prefijándolos con npm
en la tarea de Deno.
{ "tasks": { "dev": "deno run --allow-read --watch main.ts",+ "build": "deno run npm:build" }, "imports": { "@std/assert": "jsr:@std/assert@1", "@std/text": "jsr:@std/text@^1.0.8" } }
El sistema de tareas de Deno ofrece varias opciones para ejecutar múltiples comandos:
-
Ejecución Secuencial (
;
): Ejecuta comandos en secuencia, independientemente del resultadodeno.json{"tasks": {"dev": "deno run --allow-read --watch main.ts","build": "deno run npm:build",+ "test": "deno test",+ "prod": "deno task test ; deno task build"},"imports": {"@std/assert": "jsr:@std/assert@1","@std/text": "jsr:@std/text@^1.0.8"}} -
Ejecución Condicional (
&&
): Ejecuta el siguiente comando solo si el anterior tiene éxitodeno.json{"tasks": {"dev": "deno run --allow-read --watch main.ts","build": "deno run npm:build","test": "deno test",- "prod": "deno task test ; deno task build"+ "prod": "deno task test && deno task build"},"imports": {"@std/assert": "jsr:@std/assert@1","@std/text": "jsr:@std/text@^1.0.8"}} -
Ejecución Alternativa (
||
): Ejecuta el segundo comando solo si el primero falladeno.json{"tasks": {"dev": "deno run --allow-read --watch main.ts","build": "deno run npm:build","test": "deno test",- "prod": "deno task test && deno task build"+ "prod": "deno task test || deno task build"},"imports": {"@std/assert": "jsr:@std/assert@1","@std/text": "jsr:@std/text@^1.0.8"}} -
Ejecución Asíncrona (
&
): Ejecuta comandos simultáneamentedeno.json{"tasks": {"dev": "deno run --allow-read --watch main.ts","build": "deno run npm:build","test": "deno test",- "prod": "deno task test || deno task build"+ "prod": "deno task test & deno task build"},"imports": {"@std/assert": "jsr:@std/assert@1","@std/text": "jsr:@std/text@^1.0.8"}}
Además, podemos redirigir el output de nuestros scripts a un archivo usando >
o utilizar comandos Unix directamente en las tareas, funcionando perfectamente en Windows, macOS y Linux.
{ "tasks": { "dev": "deno run --allow-read --watch main.ts > log.txt" }, "imports": { "@std/assert": "jsr:@std/assert@1", "@std/text": "jsr:@std/text@^1.0.8" }}
El sistema de tareas de Deno es una solución completa para mantener nuestros comandos organizados y optimizar nuestro flujo de trabajo de desarrollo.