Grunt es un ejecutor de tareas de JavaScript , una herramienta que se utiliza para ejecutar automáticamente tareas frecuentes como minificación , compilación , pruebas unitarias y linting . Utiliza una interfaz de línea de comandos para ejecutar tareas personalizadas definidas en un archivo (conocido como Gruntfile). Grunt fue creado por Ben Alman y está escrito en Node.js. Se distribuye a través de npm . En octubre de 2022, había más de 6000 complementos disponibles en el ecosistema Grunt. [5]
Las empresas y proyectos que utilizan Grunt incluyen Adobe Systems , jQuery , Twitter , Mozilla , Bootstrap , Cloudant , Opera , WordPress , Walmart y Microsoft . [5]
Grunt fue creado originalmente por Ben Alman en 2012 como una alternativa eficiente para simplificar la escritura y el mantenimiento de un conjunto de tareas de proceso de compilación de JavaScript en un archivo enorme. Fue diseñado como una herramienta de compilación de línea de comandos basada en tareas para proyectos de JavaScript. [6]
Grunt se utiliza principalmente para automatizar tareas que deben realizarse de forma rutinaria. Hay miles de complementos que se pueden instalar y utilizar directamente para realizar algunas tareas de uso común. Una de las características más deseables de Grunt es que es altamente personalizable, es decir, permite a los desarrolladores agregar, extender y modificar tareas personalizadas para que se ajusten a sus necesidades personales; cada tarea tiene un conjunto de opciones de configuración que el usuario puede establecer. Además, Grunt ofrece la capacidad de definir tareas personalizadas, que pueden combinar múltiples tareas existentes en una sola tarea o agregar una funcionalidad completamente nueva. [7]
La interfaz de línea de comandos (CLI) de Grunt se puede instalar globalmente a través de npm . Al ejecutar el grunt
comando se cargará y ejecutará la versión de Grunt instalada localmente en el directorio actual. Por lo tanto, podemos mantener diferentes versiones de Grunt en diferentes carpetas y ejecutar cada una como queramos. [5]
Para usar Grunt en un proyecto, se deben crear dos archivos específicos en el directorio raíz, concretamente package.json y un Gruntfile.
dependencies
o en la devDependencies
sección .Las tareas son los módulos que realizan un trabajo específico y se definen en el archivo Gruntfile.
Los desarrolladores pueden cargar tareas predefinidas desde complementos de Grunt existentes o escribir código personalizado para definir sus propias tareas según sus requisitos. Una vez definidas, estas tareas se pueden ejecutar desde la línea de comandos simplemente ejecutando grunt <taskname>
. Si lo <taskname>
definido en el archivo Grunt es "predeterminado"grunt
, entonces bastará con ejecutarlo .
El siguiente es un ejemplo de un Gruntfile escrito en JavaScript que muestra cómo cargar complementos, crear tareas personalizadas y configurarlas:
módulo .exports = función ( gruñido ) { // Configuración de la tarea grunt . initConfig ({ taskName1 : 'Configuración de la tarea1' , taskName2 : 'Configuración de la tarea2' }); // Carga complementos grunt . loadNpmTasks ( 'pluginName1' ); grunt . loadNpmTasks ( 'pluginName2' ); // Tareas personalizadas grunt . registerTask ( 'customTaskName1' , 'Descripción de la tarea personalizada' , function ( taskParameter ) { // Declaraciones personalizadas }); // Combinar varias tareas en una sola tarea grunt . registerTask ( 'customTaskName2' , [ 'taskName1' , 'customTaskName1' ]); // Tarea predeterminada: se ejecuta si no se especifica el nombre de la tarea grunt . registerTask ( 'default' , [ 'customTaskName2' ]); };
En el ejemplo anterior, al ejecutar el grunt
comando se ejecutará <customtaskName2>
lo que se definió anteriormente como una combinación de ambos <taskName1>
y <customTaskName1>
.
Los complementos son código reutilizable que define un conjunto de tareas. Cada complemento contiene internamente un directorio de tareas con archivos JavaScript que tienen la misma sintaxis que un archivo Grunt. La mayoría de los complementos de Grunt se publican con la palabra clave gruntplugin
[8] en npm y tienen el prefijo grunt
. Esto ayuda a Grunt a mostrar todos los complementos en la lista de complementos de Grunt. Los complementos oficialmente compatibles con Grunt tienen el prefijo grunt-contrib
[8] y también están marcados con un símbolo de estrella en la lista de complementos. Algunos complementos populares incluyen grunt-contrib-watch, grunt-contrib-clean, grunt-contrib-uglify.
Los desarrolladores pueden incluso crear sus propios complementos de Grunt usando el grunt-init
complemento y publicarlos en npm usando el npm publish
comando.
Las siguientes son algunas de las ventajas de utilizar Grunt:
Ant o Apache Ant es una herramienta de compilación basada en Java . Ant tiene un poco más de cien tareas integradas que se adaptan mejor a proyectos con una estructura de compilación Java. Escribir código personalizado en Ant requiere que los usuarios escriban un archivo JAR y lo hagan referencia desde XML . Esto agregaría complejidades innecesarias a proyectos que no requieren Java. Las configuraciones de compilación de Ant se enumeran en formato XML en lugar de JSON . [7]
Rake permite a los desarrolladores definir tareas en Ruby . Rake no tiene el concepto de complementos o tareas predefinidas, lo que significa que todas las acciones requeridas deben escribirse y luego ejecutarse. Esto hace que los desarrollos sean costosos en comparación con Grunt, que tiene un gran conjunto de complementos reutilizables. [7]
Gulp.js es una herramienta de ejecución de tareas basada en JavaScript similar a Grunt, ya que ambas siguen una arquitectura modular y se basan en npm . Las tareas de Gulp se definen mediante código en lugar de configuración. Gulp es más rápido que Grunt. Grunt utiliza archivos temporales para transferir la salida de una tarea a otra, mientras que en Gulp los archivos se transmiten entre las tareas. [7]
{{cite book}}
: Mantenimiento de CS1: ubicación ( enlace )