zoukankan      html  css  js  c++  java
  • Gulp实战(二)

    一.配置环境

    1.基于NodeJs安装Git,npm,gulp

    2.安装各类插件

    3.参考文档

    二.测试项目结构

    image

    三.配置文件代码

    var gulp = require('gulp'),
        del = require('del'), //删除文件/文件夹
        gulpif = require('gulp-if'),
        gulpSequence = require('gulp-sequence'), //gulp顺序执行任务插件
        imagemin = require('gulp-imagemin'), //压缩图片文件(包括PNG、JPEG、GIF和SVG图片)
        cache = require('gulp-cache'), //gulp的缓存代理
        concat = require('gulp-concat'); //多个文件合并成一个
    var nano = require('gulp-cssnano'), ////删除空白和注释,并且压缩代码
        postcss = require("gulp-postcss"), //css预编译器
        sprites = require('postcss-sprites').default, //CSS精灵
        autoprefixer = require('autoprefixer'), //自动补全浏览器兼容性前缀
        cssgrace = require('cssgrace'); //CSS后处理工具,hackIE
    var uglify = require('gulp-uglify'); //通过UglifyJS来压缩JS文件
    var rev = require('gulp-rev'), //对文件名加MD5后缀
        revCollector = require('gulp-rev-collector'); //这个插件就是从manifests中获取静态资源版本数据, 该数据由不同的流产生, 并且替换html中的链接.
    var minifyHtml = require('gulp-minify-html'); //压缩HTML文件
    var usemin = require('gulp-usemin'), //用来将HTML 文件中(或者templates/views)中没有优化的script 和stylesheets 替换为优化过的版本
        livereload = require('gulp-livereload'),
        notify = require('gulp-notify');
    var SRC_DIR = './src/';
    var DST_DIR = './dist/';
    var condition = true;
    gulp.task('clean', function() {
        return del(['dist']);
    });
    
    /**
     * 压缩图片
     */
    gulp.task('min-img', function() {
        gulp.src(SRC_DIR + '/img/*.{png,jpg,gif,ico}')
            .pipe(cache(imagemin({ //从缓存中读取,OK,只针对修改后的图片  
                optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级)
                progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
                interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
                multipass: true, //类型:Boolean 默认:false 多次优化svg直到完全优化
                svgoPlugins: [{ removeViewBox: false }], //不要移除svg的viewbox属性
                progressive: true
            })))
            .pipe(gulp.dest(DST_DIR + '/img')); //输出目录
    });
    
    /**
     * 压缩CSS
     */
    gulp.task("min-css-pc", function() {
        // PostCSS
        var processors = [
            sprites({
                'stylesheetPath': SRC_DIR + '/css/',
                'spritePath': DST_DIR + '/img/'
            }),
            autoprefixer({
                browsers: ['> 1%', 'last 2 versions', 'ie 6-11']
            }),
            cssgrace
        ];
        return gulp.src([SRC_DIR + '/css/**/*.css'])
            .pipe(nano({
                discardComments: {
                    removeAll: true
                }
            }))
            .pipe(postcss(processors))
            .pipe(gulp.dest(DST_DIR + '/css/'));
    });
    
    /**
     * 压缩JS
     */
    gulp.task('min-js', function() {
        return gulp.src(SRC_DIR + '/js/**/*.js')
            .pipe(uglify())
            .pipe(gulp.dest(DST_DIR + '/js/'));
    });
    
    /*
     * 压缩并版本化JS
     */
    gulp.task('rev-min-js', function() {
        return gulp.src(SRC_DIR + '/js/**/*')
            .pipe(concat('all.min.js'))
            .pipe(uglify())
            .pipe(rev())
            .pipe(gulp.dest(DST_DIR + '/js/'))
            .pipe(rev.manifest())
            .pipe(gulp.dest(DST_DIR + '/rev/js'));
    });
    
    /**
     * 压缩版本化CSS
     */
    gulp.task("rev-min-css", function() {
        // PostCSS
        var processors = [
            sprites({
                'stylesheetPath': SRC_DIR + '/css/',
                'spritePath': DST_DIR + '/img/'
            }),
            autoprefixer({
                browsers: ['> 1%', 'last 2 versions', 'ie 6-11']
            }),
            cssgrace
        ];
        return gulp.src([SRC_DIR + '/css/**/*.css'])
            .pipe(concat('all.min.css')) //合并后的文件
            .pipe(nano({
                discardComments: {
                    removeAll: true
                }
            }))
            .pipe(rev()) //版本化
            .pipe(postcss(processors)) //雪碧图生成,浏览器前缀自动补齐,IE hacker
            .pipe(gulp.dest(DST_DIR + '/css/'))
            .pipe(rev.manifest())
            .pipe(gulp.dest(DST_DIR + '/rev/css'));
    });
    
    /**
     * 压缩HTML引入版本号文件
     */
    gulp.task('rev-min-html', function() {
        return gulp.src([DST_DIR + '/rev/**/*.json', SRC_DIR + '/view/**/*.html'])
            .pipe(revCollector())
            .pipe(gulpif(
                condition, minifyHtml({
                    empty: true,
                    spare: true,
                    quotes: true
                })
            ))
            .pipe(gulp.dest(DST_DIR + '/view'));
    });
    
    /*
     * PC打包方案
     */
    gulp.task('pc', gulpSequence(
        'clean', 'min-img', 'rev-min-css', 'rev-min-js', 'rev-min-html'
    ));
    
    
    gulp.task('default', ['pc'], function() {
        // return del(['tmp/']);
    });

    四.效果

    • cmd运行命令gulp

    image

    imageimage

    imageimage

  • 相关阅读:
    OC中的字典
    OC中的那些String
    虚拟机资源共享
    虚拟机空间使用心得
    PEST和SWOT分析法
    Axure 的四种预览模式
    竞品分析:抖音VS快手
    第二章:行业与市场分析六步法
    第一章:互联网产品从0到1全流程解密(9-11)
    第一章:互联网产品从0到1全流程解密(5-8)
  • 原文地址:https://www.cnblogs.com/winyou/p/5485016.html
Copyright © 2011-2022 走看看