gulp1.4.0使用笔记

gulp是一个前端开发工具,可以配置自动化构建工作,如:js的合并 压缩,css的合并 压缩,图片的压缩等。

相比于webpack,gulp更加灵活且适用于多页面应用。

------下面说明如何 创建一个项目-用gulp构建工作流------
 
*开发的源css,js,images存放于src文件夹,合并压缩后的css,js,images发布到build文件夹。

 步骤:
 1.项目根目录下新建package.json文件-命令:npm init -y
 2.修改package.json文件内容为如下:
   {
     "name": "channelProject",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "keywords": [],
     "author": "",
     "license": "ISC",
     "devDependencies": {
       "babel-core": "^6.26.0",
       "browser-sync": "^2.18.13",
       "del": "^3.0.0",
       "gulp": "^3.9.1",
       "gulp-babel": "^7.0.0",
       "gulp-base64": "^0.1.3",
       "gulp-changed": "^3.1.0",
       "gulp-clean-css": "^3.9.0",
       "gulp-concat": "^2.6.1",
       "gulp-css-spriter": "^0.4.0",
       "gulp-imagemin": "^3.4.0",
       "gulp-less": "^3.3.2",
       "gulp-notify": "^3.0.0",
       "gulp-rename": "^1.2.2",
       "gulp-rev": "^8.0.0",
       "gulp-rev-collector": "^1.2.2",
       "gulp-uglify": "^3.0.0",
       "run-sequence": "^2.2.0",
       "vinyl-paths": "^2.1.0"
     }
   }
 3.项目根目录下新建gulpfile.js 文件-命令:touch gulpfile.js
 4.安装package.json中的模块-项目根目录下执行命令:npm install
 5.新增gulp任务内容到 gulpfile.js 文件,文件内容如下:
   var gulp         = require("gulp");
   var browserSync  = require("browser-sync");
   var reload       = browserSync.reload;       //刷新页面
   var less         = require("gulp-less");     //转化less到css
   var concat       = require("gulp-concat");   //合并文件
   var cleanCss     = require("gulp-clean-css");//压缩css
   var imagemin     = require("gulp-imagemin"); //压缩图片
   //var base64       = require("gulp-base64");   //把样式中使用的小图片转为base64
   //var spriter      = require("gulp-css-spriter"); //把样式中使用的小图片合成雪碧图 不流行
   var babel        = require("gulp-babel");    //把高版本js转为低版本
   var uglify       = require("gulp-uglify");   //压缩js
   var runSequence  = require("run-sequence");  //线性执行任务
   var notify       = require("gulp-notify");   //任务执行提示
   var rev          = require("gulp-rev");      //文件版本控制
   var revController= require("gulp-rev-collector"); //文件版本引入控制
   var rename       = require("gulp-rename");        //相对于.src(XX)中的源文件重命路径和文件名
   var changed      = require("gulp-changed");  //任务仅执行修改了的文件
   var fs           = require("fs");            //原生nodeJs的操作文件的模块
   var del          = require("del");           //删除文件 不建议使用
   var vinylPaths   = require("vinyl-paths");   //在管道中删除文件 不建议使用
   //注意:用命令增删文件都是异步的,命令执行完毕未必已完成了对文件的增删操作。

   /*配置gulp任务源、目标路径*/
   var src = {
       root: "./src/",
       css : "./src/css/",
       js  : "./src/js/",
       images : "./src/images/",
       html : "./src/"
   };
   var build = {
       root: "./build/",
       css : "./build/css/",
       js  : "./build/js/",
       images : "./build/images/",
       html : "./build/"
   };

   //处理图片:压缩->发布
   gulp.task("images", function () {
       gulp.src(src.images + "*.*")
           .pipe(imagemin())
           .pipe(gulp.dest(build.images));
   });

   //处理less:less->css
   gulp.task('less',function () {
       gulp.src(src.css + "*.less")
           .pipe(less())
           .pipe(gulp.dest(src.css))
           .pipe(reload({stream : true}))
           .pipe(notify("less -> css [<%= file.relative %>]")) //此处必须双引号
   });

   //处理css:css合并->压缩->生成新版本号
   gulp.task("css",function () {
       gulp.src(src.css + "*.css")      //源路径
           .pipe(concat('index.css'))   //合并后的css名称
           /*.pipe(base64({
           maxImageSize: 5 * 1024,  //5kb以下的图片会转为base64
           debug:true
           }))*/
           /*.pipe(spriter({
               'spriteSheet': './build/images/spritesheet.png',
               'pathToSpriteSheetFromCSS': '../images/spritesheet.png'
           }))*/

           .pipe(cleanCss({debug:true})) //压缩css
           .pipe(rev())                  //自动生成css文件版本号
           .pipe(gulp.dest(src.css))     //目标路径
           .pipe(gulp.dest(build.css))   //目标路径

           .pipe(rev.manifest())
           .pipe(gulp.dest("./rev"))     //生成css文件版本号更新版本映射文件

           .pipe(reload({stream:true}))
           .pipe(notify("css -> concat -> compress [<%= file.relative %>]"));

   });

   //处理js:js合并->压缩->生成新版本号
   gulp.task("js",function () {
       gulp.src([src.js + "a.js" , src.js + "b.js" ])
           .pipe(concat("index.js"))     //合并后的名称
           .pipe(gulp.dest(src.js));     //合并后先存到开发环境

       gulp.src(src.js + "index.js")
           /*.pipe(babel({
               presets : ['es2015']
            }))*/
           .pipe(uglify())                 //压缩js
           .pipe(rename("./index.js"))     //压缩后存储名称 该路径是相对于源文件index.js的提取路径
           .pipe(gulp.dest(build.js))      //目标路径
           .pipe(notify("js -> concat -> compress [<%= file.relative %>]"));
   });

   //处理html:更新引用资源的版本号->发布
   gulp.task("html", function () {
      fs.exists("./rev/rev-manifest.json", function (isExist) {
          var count = 0;
          if(isExist == true){
              gulp.src(["./rev/*.json" , src.html + "*.html"])
                  .pipe(changed(src.html + "*.html"))
                  .pipe(revController())       //版本映射
                  .pipe(gulp.dest(build.html)) //gulp.dest只能到文件夹路径
                  .pipe(reload({stream : true}));
          }else{
              if(count > 10){
                  return;
              }else{
                  runSequence("html");
                  count ++ ;
              }
          }
      })
   });

   //清除:清除build和版本映射文件 不建议使用
   gulp.task("clear", function () {
       del([build.root, "./rev/"]);
   });

   //综合任务
   gulp.task("default",  ['images','less', "css", "js", 'html'], function () {
       //runSequence(["images","less"], "css", "js", "html");
       browserSync.init({
           server : {
              baseDir : build.root
           },
           port : "8080"
       });
       gulp.watch(src.css + "*.less", ["images", "css", "html"]); //gulp.watch的起始路径最好不加./
       gulp.watch(src.html + "*.html", ["html"]);
   });

  6.项目根目录下执行命令:gulp


------ 附件 package.json ------

{
  "name": "channelProject",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.0",
    "browser-sync": "^2.18.13",
    "del": "^3.0.0",
    "gulp": "^3.9.1",
    "gulp-babel": "^7.0.0",
    "gulp-base64": "^0.1.3",
    "gulp-changed": "^3.1.0",
    "gulp-clean-css": "^3.9.0",
    "gulp-concat": "^2.6.1",
    "gulp-css-spriter": "^0.4.0",
    "gulp-imagemin": "^3.4.0",
    "gulp-less": "^3.3.2",
    "gulp-notify": "^3.0.0",
    "gulp-rename": "^1.2.2",
    "gulp-rev": "^8.0.0",
    "gulp-rev-collector": "^1.2.2",
    "gulp-uglify": "^3.0.0",
    "run-sequence": "^2.2.0",
    "vinyl-paths": "^2.1.0"
  }
}

------ 附件 gulpfile.js ------

var gulp         = require("gulp");
var browserSync  = require("browser-sync");
var reload       = browserSync.reload;       //刷新页面
var less         = require("gulp-less");     //转化less到css
var concat       = require("gulp-concat");   //合并文件
var cleanCss     = require("gulp-clean-css");//压缩css
var imagemin     = require("gulp-imagemin"); //压缩图片
//var base64       = require("gulp-base64");   //把样式中使用的小图片转为base64
//var spriter      = require("gulp-css-spriter"); //把样式中使用的小图片合成雪碧图 不流行
var babel        = require("gulp-babel");    //把高版本js转为低版本
var uglify       = require("gulp-uglify");   //压缩js
var runSequence  = require("run-sequence");  //线性执行任务
var notify       = require("gulp-notify");   //任务执行提示
var rev          = require("gulp-rev");      //文件版本控制
var revController= require("gulp-rev-collector"); //文件版本引入控制
var rename       = require("gulp-rename");        //相对于.src(XX)中的源文件重命路径和文件名
var changed      = require("gulp-changed");  //任务仅执行修改了的文件
var fs           = require("fs");            //原生nodeJs的操作文件的模块
var del          = require("del");           //删除文件 不建议使用
var vinylPaths   = require("vinyl-paths");   //在管道中删除文件 不建议使用
//注意:用命令增删文件都是异步的,命令执行完毕未必已完成了对文件的增删操作。

/*配置gulp任务源、目标路径*/
var src = {
    root: "./src/",
    css : "./src/css/",
    js  : "./src/js/",
    images : "./src/images/",
    html : "./src/"
};
var build = {
    root: "./build/",
    css : "./build/css/",
    js  : "./build/js/",
    images : "./build/images/",
    html : "./build/"
};

//处理图片:压缩->发布
gulp.task("images", function () {
    gulp.src(src.images + "*.*")
        .pipe(imagemin())
        .pipe(gulp.dest(build.images));
});

//处理less:less->css
gulp.task('less',function () {
    gulp.src(src.css + "*.less")
        .pipe(less())
        .pipe(gulp.dest(src.css))
        .pipe(reload({stream : true}))
        .pipe(notify("less -> css [<%= file.relative %>]")) //此处必须双引号
});

//处理css:css合并->压缩->生成新版本号
gulp.task("css",function () {
    gulp.src(src.css + "*.css")      //源路径
        .pipe(concat('index.css'))   //合并后的css名称
        /*.pipe(base64({
        maxImageSize: 5 * 1024,  //5kb以下的图片会转为base64
        debug:true
        }))*/
        /*.pipe(spriter({
            'spriteSheet': './build/images/spritesheet.png',
            'pathToSpriteSheetFromCSS': '../images/spritesheet.png'
        }))*/

        .pipe(cleanCss({debug:true})) //压缩css
        .pipe(rev())                  //自动生成css文件版本号
        .pipe(gulp.dest(src.css))     //目标路径
        .pipe(gulp.dest(build.css))   //目标路径

        .pipe(rev.manifest())
        .pipe(gulp.dest("./rev"))     //生成css文件版本号更新版本映射文件

        .pipe(reload({stream:true}))
        .pipe(notify("css -> concat -> compress [<%= file.relative %>]"));

});

//处理js:js合并->压缩->生成新版本号
gulp.task("js",function () {
    gulp.src([src.js + "a.js" , src.js + "b.js" ])
        .pipe(concat("index.js"))     //合并后的名称
        .pipe(gulp.dest(src.js));     //合并后先存到开发环境

    gulp.src(src.js + "index.js")
        /*.pipe(babel({
            presets : ['es2015']
         }))*/
        .pipe(uglify())                 //压缩js
        .pipe(rename("./index.js"))     //压缩后存储名称 该路径是相对于源文件index.js的提取路径
        .pipe(gulp.dest(build.js))      //目标路径
        .pipe(notify("js -> concat -> compress [<%= file.relative %>]"));
});

//处理html:更新引用资源的版本号->发布
gulp.task("html", function () {
   fs.exists("./rev/rev-manifest.json", function (isExist) {
       var count = 0;
       if(isExist == true){
           gulp.src(["./rev/*.json" , src.html + "*.html"])
               .pipe(changed(src.html + "*.html"))
               .pipe(revController())       //版本映射
               .pipe(gulp.dest(build.html)) //gulp.dest只能到文件夹路径
               .pipe(reload({stream : true}));
       }else{
           if(count > 10){
               return;
           }else{
               runSequence("html");
               count ++ ;
           }
       }
   })
});

//清除:清除build和版本映射文件 不建议使用
gulp.task("clear", function () {
    del([build.root, "./rev/"]);
});

//综合任务
gulp.task("default",  ['images','less', "css", "js", 'html'], function () {
    //runSequence(["images","less"], "css", "js", "html");
    browserSync.init({
        server : {
           baseDir : build.root
        },
        port : "8080"
    });
    gulp.watch(src.css + "*.less", ["images", "css", "html"]); //gulp.watch的起始路径最好不加./
    gulp.watch(src.html + "*.html", ["html"]);
});


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值