Grunt nos permite configurar tareas automáticas y nos hace ahorrar tiempo en nuestro desarrollo.
Estas tareas pueden ser como:
- Compilar archivos de preprocesadores.
- Optimizar imágenes.
- Reducir tamaños archivos Javascript.
- Validación de sintaxis.
- Copiado de archivos de una ruta a otra.
- Borrado de archivos.
- Generar documentación.
- .......
Requisitos:
- Tener instalado Node.js
- Tener instalado grunt de forma global y en el proyecto que estamos haciendo.
Instalar grunt de forma global :
- Escribimos en la consola
npm install -g grunt-cli
Instalar grunt en un proyecto
- En la carpeta raiz de nuestro proyecto crearemos un archivo llamado package.json con la instrucción:
- Instalamos grunt:
npm init
Rellenaremos los datos que nos piden sobre nuestro proyecto y al finalizar tendremos creado ya el archivo.
Si estamos trabajando ya con bower ya estará creado. Si no sabes cómo usar bower y dependencias Bower
npm install grunt --save -dev
- En nuestro archivo package.json ya se habrá creado la dependencia de nuestro proyecto hacia grunt.
Una vez instalado grunt tendremos en la carpeta raiz una carpeta llamada node_modules:
- En esta carpeta se almacenaran los plugins.
- Los plugins de grunt tambiérn se llaman contribs.Son módulos que se encargan de las tareas comunes de grunt.
En la carpeta raiz se habrá creado un achivo llamado Gruntfile.js .
- Este archivo es el encargado de la carga de los plugins, además de incluir la configuración de cada una de las tareas.
- Se compone de las siguientes partes:
- La función contenedora.
- Configuración de proyectos y tareas.
- Carga de plugins.
- Registro de tareas.
1. La función contenedora.
- Esta función es la que contendrá todo nuestro código de Grunt.js.
module.exports = function(grunt) {
// Configuración de Grunt.js
};
2. Configuración de proyectos y tareas.
- Aquí encontramos el método grunt.initConfig, este método inicializa un objeto de configuración para el proyecto actual.
- El objeto se utiliza para las tareas y se puede acceder a él mediante el método grunt.config, dicho objeto es un objeto Javascript que nosotros ingresaremos.
- Por lo general este objeto lo iremos alimentando con todas las configuraciones de tareas que deseemos poner en nuestro proyecto.
grunt.initConfig({
// Configuración para proyectos y tareas.
});
3. Carga de plugins.
- Para la carga de plugins de Grunt.js, usaremos el método loadNpmTasks, con el siguiente código cargaremos el plugin “grunt-contrib-uglify”.
// Cargar la tarea grunt-contrib-uglify
grunt.loadNpmTasks('grunt-contrib-uglify');
4. Registro de tareas.
- Para el registro de tareas usaremos el método registerTask de Grunt.js.
// Tarea por defecto.
grunt.registerTask('default', ['uglify']);
Este método tiene 2 parámetros:
-
El nombre que queremos ponerle a la tarea y con este mismo nombre podremos acceder a ejecutar la tarea por ejemplo:
grunt default
2. El segundo parámetro es un Array de nombres de tareas, donde podemos agregar una o más tareas, como podemos ver en el siguiente ejemplo.
grunt.registerTask('default', ['js', 'uglify']);
En este ejemplo vemos que se registró la tarea llamada default y dentro de esta tarea se ejecutarán en el orden indicado las siguientes tareas: js y uglify.
Ejemplo 1: Para minificar archivos js, usaremos el plugin grunt-contrib-uglify.
1.Instalar el plugin desde consola.
npm install grunt-contrib-uglify --save-dev
se actualizará el archivo package.json con la nueva dependencia.
Ejemplo 1: Para minificar archivos js, usaremos el plugin grunt-contrib-uglify.
2.Cargar la tarea en el archivo Gruntfile.js.
Abrimos el archivo Gruntfile.js y añadimos:
grunt.loadNpmTasks('grunt-contrib-uglify');
Ejemplo 1: Para minificar archivos js, usaremos el plugin grunt-contrib-uglify .
3.Configurar la tarea también desde Gruntfile.js
Este paso será personalizado para cada tarea y lo ideal es consultar la documentación de cada plugin que suele estar incluida en GitHub. Aquí podrá encontrar la documentación
Ejemplo 1: Para minificar archivos js, usaremos el plugin grunt-contrib-uglify .
3.Configurar la tarea también desde Gruntfile.js
module.exports = function(grunt) { grunt.initConfig({ uglify: { my_target: { files: { '_/js/scripts.min.js': ['_/components/js/vendor/*.js','_/components/js/scripts.js'] } } //my_target } //uglify }); grunt.loadNpmTasks('grunt-contrib-uglify'); };
Ejemplo 1: Para minificar archivos js, usaremos el plugin grunt-contrib-uglify .
3.Configurar la tarea también desde Gruntfile.js
Escribimos por consola en la carpeta donde está gruntfile.js
grunt uglify:my_target
Se habrá creado un archivo nuevo dentro de la carpeta /_/js/ llamado scripts_min.js.
Ejemplo 1: Para minificar archivos js, usaremos el plugin grunt-contrib-uglify .
3.Configurar la tarea también desde Gruntfile.js
Otra forma de codificar este plugin podría ser (Como vemos es muy importante leer la documentación del plugin)
module.exports = function (grunt) {
grunt.initConfig({
uglify: {
options: {
mangle: false,compress: {
drop_console: true
}
},
js: {
files: [{
cwd: 'js/src/',expand: true,src: '*.js',dest: 'js/min/'
}]
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['uglify']);
};
Con esto solo tenemos que ingresar por medio del terminal a nuestra carpeta donde esta alojado el Gruntfile.js y ejecutar la tarea registrada.
grunt default
Al ejecutar la tarea, Grunt.js minificará los archivos *.js que se encuentren en la carpeta js/src/ y pondrá el resultado en la carpeta js/min/.
Otros plugins muy utilizados en grunt:
grunt.loadNpmTasks('grunt-contrib-watch'); --> para vigilar cambios
grunt.loadNpmTasks('grunt-contrib-imagemin'); --> minificar el tamaño de las imagenes
grunt.loadNpmTasks('grunt-autoprefixer') --> añadir o quitar vendor prefixes
grunt.loadNpmTasks('grunt-contrib-cssmin'); --> minificar el tamaños de archivo css
grunt.loadNpmTasks('grunt-browser-sync') ; --> sincronizar en el navegador y otros dispositivos
Agradecer a las siguientes webs donde consulté documentación:
Para más slides sobre CSS:
https://bermartinv.github.io/css/files/taller/menu_taller.html