Buscar..


Sintaxis

  • npm install [nombre del plugin] --save-dev
  • npm install [nombre del plugin] --save
  • Función <function-name> (glob) {$ .src (glob) .pipe ([plugin 1]). Pipe ([plugin 2]) .... pipe ([plugin n]). Pipe ($ .dest ( <destination-name> )}
  • $.task(<taskname> , [dependencies] , <body>);

Observaciones

Continuar leyendo - Crear una tarea predeterminada y configurar la sincronización del navegador

Referencias

Guía paso a paso para la automatización del flujo de trabajo de Gulp para principiantes absolutos que documenté en mi blog

Cargando todos los complementos de Package.JSON

Suponiendo que tiene una idea de cómo instalar trago, permítanos sumergirnos hasta requerir todas las dependencias de gulp de package.json en la carpeta raíz de su proyecto.

En caso de que todavía no tenga un gulpfile, cree un archivo vacío con el nombre

gulpfile.js

Primero, requerimos un trago. al igual que:

var $ = require('gulp');

A continuación, vamos a cargar todos nuestros complementos, en nuestro gulpfile, por el siguiente fragmento de código

Nota

Lea los comentarios en todos los fragmentos que incluiremos en esta lectura, ya que brindan más información sobre cada funcionalidad.

/*
require gulp-load-plugins, and call it
gulp-load-plugins will require individually,
all the plugins installed in package.json at the root directory
these required plugins, are lazy loaded
that is, gulp-load-plugins will only require them when they are referenced in this file
plugins are available for perusal, via camelcased names, minus gulp
eg: gulp-clean-css is accessed by $$.cleanCss
*/
var $$ = require('gulp-load-plugins')();

NOTA

A lo largo de los muchos ejemplos que tendremos en el artículo, tenemos alias

  1. trago como $ y
  2. gulp-load-plugins como $$

puramente para facilitar la escritura.

Instalación de complementos para imágenes receptivas | Minificación Css | Minificación Js

Nuestro objetivo, es

  1. Haga que sus imágenes se ajusten a los anchos y las escalas de manera adecuada, generando una batería de imágenes de anchos variados, y para minimizarlas
  2. Lint tu Javascript
  3. Minimice sus activos: JS / CSS / HTML, lo que le permite alojar un código más ligero que el más ligero
  4. Mire los archivos css / js / image para ver si hay cambios y reconstruya las optimizaciones
  5. Sincronizar los cambios durante el desarrollo, en un navegador que sirva su sitio.

Necesitamos una serie de complementos, así que instalémoslos todos. Por favor, ejecute todos estos en la carpeta raíz del proyecto.

Complementos de procesamiento de imágenes

bash $ npm install --save-dev gulp-responsive 
bash $ npm install --save-dev gulp-imagemin 
bash $ npm install --save-dev imagemin
bash $ npm install --save-dev imagemin-jpeg-recompress
bash $ npm install --save-dev imagemin-pngquant 

Complementos optimizador de activos

bash $ npm install --save-dev gulp-clean-css
bash $ npm install --save-dev gulp-uglify
bash $ npm install --save-dev gulp-minify-html
bash $ npm install --save-dev gulp-jshint
bash $ npm install --save-dev gulp-concat
bash $ npm install --save-dev gulp-autoprefixer

Anatomía de una función trilla.

[Function <name>] (glob) {

$.src(glob)

.pipe([plugin 1])
.pipe([plugin 2])
.
.
.
.pipe([plugin n])
.pipe( $.dest(<destination-name>)

}

Nota

pipe es un método que transmite todos los archivos que coinciden con la entrada global, a nuestros complementos (minifyhtml en este caso).

Es simple de imaginarlo así:

$ .src es lo que construye el flujo y la tubería canaliza cada archivo individual que hace coincidir el globo hacia abajo a cada complemento en la tubería. Cada complemento al que se pasa el archivo, modifica su contenido en la memoria solo hasta que se alcanza $ .dest, que luego se actualiza / crea archivos transmitidos por $ .src

Cuando,

$ -> trago

$$ -> gulp-load-plugins

Optimización y Minificación de Activos.


Entonces, antes de escribir las funciones del optimizador, necesitamos instalar un par de complementos de almacenamiento en caché.

bash $ npm install --save-dev gulp-cached
bash $ npm install --save-dev gulp-remember

Usted podría preguntarse por qué dos cachés eh !. gulp-cached , pasa solo contenido modificado o nuevo por la tubería a otros complementos. Por lo tanto, dado que queremos que los archivos sin cambios se utilicen para concatenar en un solo archivo por activo (css | js) también, necesitamos un truco, además de gulp-cached

Primero usamos gulp-cached para construir una lista de archivos que han cambiado

En segundo lugar, necesitamos un trago, recordar para mantener un seguimiento de todos los archivos que pasan por esa lista en la memoria.

Primera ejecución: no hay archivos en caché, por lo que gulp-caché los pasará a todos para recordarlos.

Ejecuciones subsiguientes: solo los archivos nuevos o modificados se canalizan por gulp-cached. Dado que el contenido del archivo actual ha cambiado, gulp-remember actualiza su caché.

Genial, escribamos nuestro primer optimizador.

Optimizador de estilo


// Goal

/*

1. cache existing files on the first run
2. each file , 
       a. Is autoprefixed with cross browser compatible prefixes for any css property ( justify-content for e.g)
       b. Is concatenated into app.css
3. app.css is minified
4. On subsequent runs , the above process is implemented on file modifications/additions only

*/

/*
*@src - input a glob pattern - a string eg 'images/**/*' or '**/*.css' or, an array eg ['glob1','glob2']
*/
var optimizeStyles = function(src) {

return $.src(src).
pipe($$.cached('styles')).
pipe($$.autoprefixer({
browsers: ['last 2 versions']
})).
pipe($$.remember('auto-prefixed-stylesheets')).
pipe($$.concat('app.css')).
pipe($.dest('build/css')).
pipe($$.cleanCss()).
pipe($$.rename({
suffix: '.min'
})).
pipe($.dest('build/css'))
}

Nota

$ -> trago

$$ -> gulp-load-plugins

$ .src -> crea secuencias de archivos que coinciden con el globo pasado como src

$ .dest -> guarda el archivo manipulado en la ruta especificada

Optimizador de secuencias de comandos


// Goal

/*

1. cache existing files on the first run
2. each file , 
       a. Is linted with jshint 
       b. Is concatenated into app.js
3. app.js is minified
4. On subsequent runs , the above process is implemented on file modifications/additions only

*/

/*
*@src - input a glob pattern - a string eg 'js/**/*' or '**/*.js' or, an array eg ['glob1','glob2']
*/

var optimizeScripts = function(src) {

    return $.src(src).
    pipe($$.cached('scripts')).
    pipe($$.jshint()).
    pipe($$.jshint.reporter('default')).
    pipe($$.jshint.reporter('fail')).
    pipe($$.remember('linted-scripts')).
    pipe($$.concat('app.js')).
    pipe($.dest('build/js')).
    pipe($$.uglify()).
    pipe($$.rename({
        suffix: '.min'
    })).
    pipe($.dest('build/js'))


}

Nota

$ -> trago

$$ -> gulp-load-plugins

$ .src -> crea secuencias de archivos que coinciden con el globo pasado como src

$ .dest -> guarda el archivo manipulado en la ruta especificada

Generar imágenes responsivas

Pasemos ahora al procesamiento de imágenes. Por lo tanto, el objetivo es tener una variedad de tamaños para cada imagen que se va a servir.

¿Por qué?

Bueno, para comprender por qué necesitamos una batería de imágenes con un rango de anchos, debemos reflexionar sobre el hecho de que probablemente haya millones de dispositivos con resoluciones variadas. Necesitamos una imagen a escala sin mucha pixelación. Al mismo tiempo, necesitamos mejorar los tiempos de carga de la página, descargando solo una imagen, que se ajuste al ancho que contiene, y también con la dimensión más pequeña posible, para hacerlo. Hay blogs académicos como el que escribió Eric Portis, que resalta la ineficacia de las consultas de los medios de comunicación y sirve como una guía completa para comprender conceptos como conjuntos y tamaños.

Puede referirse a la epopeya de Eric Portis aquí.

Ahora, nuestra función, necesita tomar un globo, y un ancho como entradas, y hacer su magia y empujar el archivo que genera cada ejecución, a un destino y minimizar la imagen respondida.

Hemos instalado dos complementos de compresión de imagen en nuestro primer ejemplo

Dado que estos complementos NO comienzan con un prefijo "trago", debemos cargarlos manualmente en nuestro archivo de gulp.

Por lo tanto, exigámoslos manualmente, después de la declaración gulp-load-plugins en la parte superior de nuestro archivo gulp.

al igual que:

var compressJpg = require('imagemin-jpeg-recompress');
var pngquant = require('imagemin-pngquant');

Vale la pena tener en cuenta que el procesador de imagen nítido responde a tragos, lo que es mejor que imagemagick BY FAAAAR !. Sharp es lo que utiliza gulp-responsive para recortar sus imágenes a los anchos deseados.

Puede consultar las opciones de configuración que responden rápidamente, para obtener una lista completa de los parámetros de configuración. Solo he usado

  • ancho: para recortar nuestras imágenes al ancho w, pasado como parámetro
  • renombrar - para agregar un sufijo al nombre de la imagen, para que siga siendo único

en mi función de configuración a continuación. por lo tanto, nuestra función recortará la imagen al ancho pasado como entrada, para todas las imágenes coincidentes descifradas a través de la entrada global. luego, cada imagen se comprime con jpeg-recompress o pngquant y se guarda dentro de build / images.

Con eso en mente, nuestra función sería así:

/*
@generateResponsiveImages
*@Description:takes in a src of globs, to stream matching image files , a width,
*to resize the matching image to, and a dest to write the resized and minified files to
*@src - input a glob pattern - a string eg 'images/** /*' or 'images/*' or, an array
eg ['glob1','glob2']
*@return returns a stream
*/
var generateResponsiveImages = function(src, width, dest) {

    //declare a default destination
    if (!dest)
        dest = 'build/images';
    //case 1: src glob -  images/**/*
    // the base is the directory immediately preceeding the glob - images/ in this case
    //case 2: images/fixed/flourish.png : the base here is images/fixed/ - we are overriding
    // that by setting base to images.This is done so that, the path beginning after images/
    // - is the path under our destination - without us setting the base, dest would be,
    //build/images/flourish.png.But with us setting the base, the destination would be
    // build/images/fixed/flourish.png
    return $.src(src, {
        base: 'images'
    })

    //generate resized images according to the width passed
    .pipe($$.responsive({
            //match all pngs within the src stream
            '**/*.png': [{
                width: width,
                rename: {
                    suffix: '-' + width
                },
                withoutEnlargement: false,
            }],
            //match all jpgs within the src stream
            '**/*.jpg': [{
                width: width,
                rename: {
                    suffix: '-' + width
                },
                progressive: true,
                withoutEnlargement: false,
            }]
        }, {

            errorOnEnlargement: false,
            errorOnUnusedConfig: false,
            errorOnUnusedImage: false

        }))
        //once the file is resized to width, minify it using the plugins available per format
        .pipe($$.if('*.jpg', compressJpg({
            min: 30,
            max: 90,
            target: 0.5
        })()))
        //use file based cache gulp-cache and it will minify only changed or new files
        //if it is not a new file and if the contents havent changed, the file is served from cache
        .pipe($$.cache($$.imagemin({
            verbose: true
        })))


    //write to destination - dest + path from base
    .pipe($.dest(dest));
}

Nota

$ -> trago

$$ -> gulp-load-plugins

$ .src -> crea secuencias de archivos que coinciden con el globo pasado como src

$ .dest -> guarda el archivo manipulado en la ruta especificada

Referencias adicionales

Minificador de HTML

*
 *@minifyHtml
 *Description:takes in a glob src, and minifies all '.html' files matched by the glob
 *@src - input a glob pattern - a string eg '/**/*.html /*' or '*.html' or, an array eg ['glob1','glob2']
 *@dest=file.base means, the modified html file will be in the same directory as the src file being minified
 *often means, the process is just a modification on the existing src file
 *@return returns a stream
 */
var minifyHtml = function(src) {
    return $.src(src)
        .pipe($$.minifyHtml())
        .pipe($.dest(function(file) {
            //file is provided to a dest callback -
            // Refer here https://github.com/gulpjs/gulp/blob/master/docs/API.md#path
            return file.base;
        }));
}

Anatomía de una tarea trillada.

La anatomía de una definición de tarea es así:

$.task(<taskname> , [dependencies] , <body>);

dependencias, es una serie de tareas que TIENEN que finalizar antes de que se ejecute la tarea actual que está definiendo. Más como forzar una ejecución síncrona en lugar de la funcionalidad asíncrona predeterminada.

Añadiendo tareas Gulp

Así que ahora tenemos

  • Una función definida arriba para optimizar los estilos.
  • Una función definida arriba para optimizar scripts.
  • Una función definida arriba para optimizar HTML.
  • Una función para generar múltiples imágenes por imagen arriba.

Todo lo que tenemos que hacer ahora, es invocarlos cuando sea necesario.

Escribamos nuestras tareas de acuerdo con la sintaxis que definimos anteriormente

/*
* $.task('name','dependency array',function)
results in building a task object as below
task:{
'name':name,
'dep':[array of dependencies],
'fn':function
}
*/


//*@return returns a stream to notify on task completion
$.task('optimizeHtml', function() {
    var src = ['**/*.html', '!{node_modules}/**/*.html'];
    return minifyHtml(src);
});

//*@return returns a stream to notify on task completion
$.task('optimizeScripts', function() {
    var src = ['js/**/*.js'];
    return optimizeScripts(src);
});

//*@return returns a stream to notify on task completion
$.task('optimizeStyles', function() {
    var src = ['css/**/*.css', 'fonts/google/**/*.css'];
    return optimizeStyles(src);
});

//Take in a callback to ensure notifying the gulp engine, that the task is done
//required since, you are not returning a stream in this task
$.task('generateResponsiveImages', function(callback) {
    var src = ['images/**/*.{jpg,png}'];
    for (var i = widths.length - 1; i >= 0; i--) {
        generateResponsiveImages(src, widths[i]);
    }
    callback();

});


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow