• 我爱工程化 之 gulp 使用(二)


         上一篇  介绍了gulp的安装、环境等配置、基本使用,那么现在,我们快走进 速8,深入了解吧......

    一、各种安装、环境配置、插件安装(参考上一篇文章)

    二、项目基本目录结构

           

    三、编写 gulpfile.js 文件

          gulp通过gulpfile.js文件来完成相关任务

        示例目录

        

       gulpfile.js

    //引入gulp及组件
    var gulp = require('gulp'),                           //基础库
        htmlmin = require('gulp-htmlmin'),                //压缩html
        rev = require('gulp-rev-append'),                 //给页面的引用添加版本号,清除页面引用缓存
        //autoprefixer = require('gulp-autoprefixer'),    //根据设置浏览器版本自动处理浏览器前缀
        //cssmin= require('gulp-minify-css'),               //css压缩(已经作废)
        cssmin= require('gulp-clean-css'),               //css压缩
        cssver = require('gulp-make-css-url-version'),    // css文件引用URL加版本号
        jshint = require('gulp-jshint'),                  //js检查
        jsmin = require('gulp-uglify'),                   //js压缩
        concat = require('gulp-concat'),                  //合并文件
        rename = require('gulp-rename'),                  //文件重命名
        imagemin = require('gulp-imagemin'),              //图片压缩
        pngquant = require('imagemin-pngquant'),          //深度压缩png图片
        cache = require('gulp-cache'),                    //图片快取,只有更改过得图片会进行压缩
        notify = require('gulp-notify'),                  //更动通知
        clean = require('gulp-clean');                    //清空文件夹
        connect = require('gulp-connect'),                //web服务
        browserSync = require('browser-sync'),            //浏览器同步
        reload = browserSync.reload;                      //自动刷新
    
    //配置开发和发布路径
    var path = {
        //开发环境
        src:{
            html:'./src/*.html',
            css:['./src/css/*.css'],
            js:['./src/js/index.js'],
            //js:['./src/js/*.js','!./src/js/{zepto.min}.js'],
            //sass:'./src/sass', 
            image:'./src/images/**/*'
        },
        //发布环境
        build:{
            html:'./build',
            js:'./build/js',
            css:'./build/css',
            image:'./build/images'
        },
        //不被处理的文件得复制
        copy:[
                {from:'./src/audio/*',to:'./build/audio'},
                {from:['./src/js/*','!./src/js/index.js'],to:'./build/js'}
            ],
        clear:['./build/*.html',
               './build/css/main.css',
               './build/js/main.js',
               './build/images'
        ]
    };
    
    /**
     * 建立任务
     * */
    // 定义web服务模块
    gulp.task('webserver', function() {
       connect.server({
           livereload: true,
           port: 8888
       });
    });
    
    // 定义web服务模块,增加浏览器同步浏览
    gulp.task('browser-sync', function() {
       browserSync({
           server: {
               baseDir: '.'
           }
       });
    });
    
    //1.HTML压缩
    /*注意:压缩时,textarea会出错,需要手动修改*/
    gulp.task('html', function () {
        var options = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true,//压缩HTML
            collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
            removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
            removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
            removeStyleLinkTypeAttributes: true//删除<style>和<link>的type="text/css"
            /*不要压页面中的JS和CSS容易出错*/
            //minifyJS: true,//压缩页面JS
            //minifyCSS: true//压缩页面CSS
        };
        gulp.src(path.src.html)
            .pipe(rev())
            //.pipe(htmlmin(options))
            .pipe(gulp.dest(path.build.html))
            .pipe(reload({stream: true}))
            .pipe(notify({message:'Html task complete'}));
    });
    
    //2.CSS压缩(基本使用) 合并之后,记得手动修改html中的引入路径
    gulp.task('css', function () {
        gulp.src(path.src.css)
            // .pipe(autoprefixer({
            //     browsers: ['last 2 versions'],
            //     //是否美化属性值 默认:true 像这样:
            //     //-webkit-transform: rotate(45deg);
            //     //        transform: rotate(45deg);
            //     cascade:true,
            //     remove:true //是否去掉不必要的前缀 默认:true
            // }))
    
            .pipe(concat('index.css'))
            .pipe(cssver())                    // CSS文件引用URl加版本号
            .pipe(cssmin({
                advanced: false,//类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
                compatibility: 'ie7',//保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
                keepBreaks: false,//类型:Boolean 默认:false [是否保留换行]
                keepSpecialComments: '*'
                //保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
            }))
            //.pipe(rename({ suffix: '.min' })) //如果是多个css合并,记得修改html引入文件的名字
            .pipe(gulp.dest(path.build.css))
            .pipe(reload({stream: true}))
            .pipe(notify({message:'Css task complete'}));
    });
    
    //3.js语法检查及压缩
    gulp.task('js', function () {
        gulp.src(path.src.js)
            .pipe(jshint())   
            .pipe(jshint.reporter('default'))
            //.pipe(concat('main.js'))
            .pipe(jsmin())
            //.pipe(rename({suffix: '.min' }))
            .pipe(gulp.dest(path.build.js))
            .pipe(reload({stream: true}))
            .pipe(notify({message:'Javascript task complete'}));
    });
    
    //4.图片处理
    gulp.task('image', function(){
        return gulp.src(path.src.image)
            .pipe(cache(imagemin({
                optimizationLevel:5,//类型:Number  默认:3  取值范围:0-7(优化等级)
                progressive:true,//类型:Boolean 默认:false 无损压缩jpg图片
                interlaced:true,//类型:Boolean 默认:false 隔行扫描gif进行渲染
                multipass:true,//类型:Boolean 默认:false 多次优化svg直到完全优化
                use: [pngquant()] //深度处理png格式的图片
            })))
            .pipe(gulp.dest(path.build.image))
            .pipe(reload({stream: true}))
            .pipe(notify({message:'Images task complete'}));
    });
    
    //5.复制文件
    gulp.task('copy', function(){
        for(var i=0,items=path.copy,len=items.length;i<len;i++){
            gulp.src(items[i].from).pipe(gulp.dest(items[i].to))
                .pipe(notify({message:'copy task complete'}));
        }
    });
      
    
    //6.清空图片、样式、js
    gulp.task('clean', function() {
        gulp.src(path.clear,{read: false})
            .pipe(clean())
            .pipe(notify({message: 'Clean task complete'}));
    });
    
    //7.默认任务 清空图片、样式、js并重建 运行语句 gulp
    gulp.task('default', ['clean'], function(){
        gulp.start('html','css','js','image','copy');
    });
    
    //X.监听任务 运行语句 gulp watch
    //watch方法是用于监听文件变化,文件一修改就会执行指定的任务
    gulp.task('watch', function () {
        //监听html
        gulp.watch(path.src.html, function (event) {
            gulp.run('html');
        });
        // 监听css
        gulp.watch(path.src.css, function () {
            gulp.run('css');
        });
        // 监听js
        gulp.watch(path.src.js, function () {
            gulp.run('js');
        });
        // 监听images
        gulp.watch(path.src.image, function () {
            gulp.run('image');
        });
    });

    四、任务运行

       前提,cmd进入项目目录

       可以一个任务一个任务的执行,例如: gulp html   html对应的是 gulp.task('html', function () {}

       这里面我要用批量任务方式,直接运行gulp命令,一波流搞定对应的是 

    gulp.task('default', ['clean'], function(){
        gulp.start('html','css','js','image','copy');
    });

      结果: 该有的全有了,帅吧。

    六、复用gulp环境及配置工具

          本人最讨厌的事情就是,重复、没意思的事情不断去做,有那时间还不如撩个妹儿,打个灰机呢,有人可能不屑于复用,那算你牛逼,我是拯救不了你这样的单身狗了......

          复用gulp的好处:不用再次本地安装那么多插件了,如果你非要再装一次,那 I 服了 YOU!

          我复用的步骤如下:

          1.先将这个demo备份,以防自己改错,然后就SB了

          2.将src里面的内容替换成自己项目的内容

          3.删除build整个文件夹

          4.修改gulpfile.js

             根据自己情况,修改文件即可 

  • 相关阅读:
    线程 ,进程和协程
    HTML
    自定义进程池的方法
    线程,进程 ,队列 基本用法总结
    socket 和 SocketServer 模块
    json 和 pickel 详解
    面向对象进阶篇
    面向对象基础 反射
    模块
    字符串格式化
  • 原文地址:https://www.cnblogs.com/xfz1987/p/5690852.html
Copyright © 2020-2023  润新知