美文网首页
自动化构建工具 gulp

自动化构建工具 gulp

作者: squidbrother | 来源:发表于2019-08-20 19:40 被阅读0次
概述

官方定义
gulp 将开发流程中让人痛苦或耗时的任务自动化,从而减少你所浪费的时间、创造更大价值。
通俗的说
gulp 是基于nodejs的(stream)流操作,可以对文件进行压缩,编译,合并等操作,学习曲线低,简单好用

安装

第一步:(全局安装的是启动器)

npm install gulp -g

第二步:
移动至项目文件夹,初始化项目,
安装gulp核心库(工程目录下安装的是核心库)

npm init -y
npm install gulp -D

查看版本

gulp -v

会显示 例:
CLI version:2.2.0 //全局 启动器版本
Local version:4.0.2 //针对项目的 核心库版本

配置和启动

配置文件:
在项目目录下,新建一个gulpfile.js作为gulp的配置文件

配置文件书写格式:

const gulp = require('gulp');  //引入核心库
const uglify = require('gulp-uglify');  //引入三方功能模块 压缩 

gulp.task('myjs1',()=>{ //任务名为myjs1的任务
    return gulp.src(['读取文件的目录'])  //读取文件位置 【讨论细节1】
    .pipe(uglify()) //执行的gulp操作
        //... 类似功能模块都书写在此位置
    .pipe(gulp.dest('操作后输出的目录'));
})
gulp.task('default',[对应任务名...]);    //对应启动的配置【讨论细节2】

针对上面的基本书写格式,有两处需要讨论

  • 1.读取文件的目录,如果是多层嵌套,针对一类应该怎么书写
    例:当前目录 src/js下,若干层级,以js为后缀名的文件
    书写:
return gulp.src(['./src/js/**/*.js']) 
  • 2.针对启动中数组部分的书写
    启动的方式有2种 针对gulp3.0版本
    不写gulp.task('default',['myjs1']);这一行,则每次在命令行中,启动gulp需要加任务名称,以上述例为说明:
gulp js

如果书写了gulp.task('default',['myjs1']);这一行,则无需增加对应 任务名

gulp

在gulp4.0中,
第一种书写会报错 "Task function must be specified"
第二种书写会报错 "Task never defined: myjs1"

所以在4.0中 此段代码书写应:

gulp.task('default',gulp.series('dojs1'));
gulp版本引起语法报错
常用的gulp插件
  • 1.gulp-uglify 压缩模块
    安装:
npm install gulp-uglify -D

语法格式:

.pipe(uglify())

例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(uglify())
    .pipe(gulp.dest('./bundle/js/'))
});
gulp.task('default',gulp.series('dojs1'));
  • 2.gulp-rename 重命名模块
    安装
npm install gulp-rename -D

语法格式:(例:增加一个min后缀名)

.pipe(rename({suffix:'.min'}))

例:(压缩并添加后缀名.min)

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(rename({suffix:'.min'}))
    .pipe(uglify())
    .pipe(gulp.dest('./bundle/js/'))
});
gulp.task('default',gulp.series('dojs1'));
压缩重命名结果
  • 3.gulp-babel (针对ES6语法做兼容) gulp uglify不支持ES6以上语法,所以需要提前babel下
    安装:
npm install gulp-babel @babel/core @babel/preset-env -D

语法格式:

.pipe(babel({
  presets:['@babel/env']
}))

例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const babel = require('gulp-babel');
gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(rename({suffix:'.min'}))
    .pipe(babel({
        presets:['@babel/env']
    }))
    .pipe(uglify())
    .pipe(gulp.dest('./bundle/js/'))
});
gulp.task('default',gulp.series('dojs1'));

源文件:1.js

const a=1;
let b=2;
if(a==b){
    alert('ab相等');
}else{
    alert('ab不相等'); 
}

结果:1.min.js

var a=1,b=2;a==b?alert("ab相等"):alert("ab不相等");
  • 4.gulp-cssmin(压缩css)
    安装:
npm install gulp-cssmin -D

语法格式:

.pipe(cssmin())

例:

const gulp = require('gulp');
const rename = require('gulp-rename');
const cssmin = require('gulp-cssmin');

gulp.task('docss1',()=>{
    return gulp
    .src(['./src/css/**/*.css'])
    .pipe(rename({suffix:'.min'}))
    .pipe(cssmin())
    .pipe(gulp.dest('./bundle/css/'))
});

gulp.task('default',gulp.series('docss1'));

结果:1.css -> 1.min.css

body,html,p{margin:0}body{backgroud:red}p{padding:0;font-size:40px;line-height:1.5em;color:#0C6;text-align:center;-webkit-text-shadow:0 1px 3px rgba(0,0,0,.3);-moz-text-shadow:0 1px 3px rgba(0,0,0,.3);-ms-text-shadow:0 1px 3px rgba(0,0,0,.3);-o-text-shadow:0 1px 3px rgba(0,0,0,.3);text-shadow:0 1px 3px rgba(0,0,0,.3)}
  • 5.gulp-imagemin (图片压缩)
    安装:
npm install gulp-imagemin -D

语法格式:

.pipe(imagemin([
  imagemin.gifsicle({interlaced:true}),
  imagemin.jpegtran({propressive:true}),
  imagemin.optipng({optimizationLevel:5}),      
]))

例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const babel = require('gulp-babel');
const cssmin = require('gulp-cssmin');
const imagemin = require('gulp-imagemin');
gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(rename({suffix:'.min'}))
    .pipe(babel({
        presets:['@babel/env']
    }))
    .pipe(uglify())
    .pipe(gulp.dest('./bundle/js/'))
});
gulp.task('docss1',()=>{
    return gulp
    .src(['./src/css/**/*.css'])
    .pipe(rename({suffix:'.min'}))
    .pipe(cssmin())
    .pipe(gulp.dest('./bundle/css/'))
});
gulp.task('doimg1',()=>{
    return gulp
    .src(['./src/img/**/*.jpg','./src/img/**/*.gif','./src/img/**/*.png'])
    .pipe(imagemin([
        imagemin.gifsicle({interlaced:true}),
        imagemin.jpegtran({propressive:true}),
        imagemin.optipng({optimizationLevel:5}),        
    ]))
    .pipe(gulp.dest('./bundle/img/'))
});
gulp.task('default',gulp.series('dojs1','docss1','doimg1'));

结果:


图片压缩
  • 6.gulp-concat (代码合并);
    安装:
npm install gulp-concat -D

语法格式:

.pipe(concat('bundle.js'))  //合并后的文件名

例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const babel = require('gulp-babel');
const cssmin = require('gulp-cssmin');
const imagemin = require('gulp-imagemin');
const sourcemaps = require('gulp-sourcemaps');
const concat = require('gulp-concat');
gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(concat('bundle.min.js'))  //压缩后的文件名
    //.pipe(rename({suffix:'.min'}))
    .pipe(babel({
        presets:['@babel/env']
    }))
    .pipe(uglify())
    .pipe(gulp.dest('./bundle/js/'))
});
gulp.task('default',gulp.series('dojs1'));

结果:bundle.min.js

"use strict";var a=1,b=2;a==b?console.log("ab相等"):console.log("ab不相等"),oDiv.style.backgroundColor="red";var oB=document.getElementsByTagName("body");oB[0].style.backgroundColor="red";
  • 7.gulp-sourcemaps( 针对JS合并后,可以锁定报错信息,源于合并前的哪个JS文件)
    安装:
npm install gulp-sourcemaps -D

【注】:依赖浏览器支持,chrome好用,firfox需要调试浏览器配置? IE不支持

语法格式:

.pipe(sourcemaps.init())    //放在读取后的第一个位置
.pipe(sourcemaps.write())   //放在输出压缩前

例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const babel = require('gulp-babel');
const cssmin = require('gulp-cssmin');
const imagemin = require('gulp-imagemin');
const sourcemaps = require('gulp-sourcemaps');
const concat = require('gulp-concat');
gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(sourcemaps.init())  //sourcemaps开始
    .pipe(concat('bundle.min.js')) 
    //.pipe(rename({suffix:'.min'}))
    .pipe(babel({
        presets:['@babel/env']
    }))
    .pipe(uglify())
    .pipe(sourcemaps.write())  //sourcemaps结束
    .pipe(gulp.dest('./bundle/js/'))
});
gulp.task('default',gulp.series('dojs1'));

结果:


错误指向
自动监听
  • gulp 3.0
    修改文件时候,监听其变化,并且动态的进行处理
    需要额外两个模块 gulp-watch、gulp-livereload
  • gulp-watch
    安装:
npm install gulp-watch -D

语法格式:

gulp.watch('监测文件路径',  gulp.series(处理任务名));
  • gulp-livereload
    安装:
npm install gulp-livereload -D

语法格式:

livereload.listen()

例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const babel = require('gulp-babel');
const cssmin = require('gulp-cssmin');
const imagemin = require('gulp-imagemin');
const sourcemaps = require('gulp-sourcemaps');
const concat = require('gulp-concat');
const watch = require('gulp-watch');
const livereload = require('gulp-livereload');
//npm install --save-dev gulp-livereload

gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(sourcemaps.init())  //sourcemaps开始
    .pipe(concat('bundle.min.js')) 
    //.pipe(rename({suffix:'.min'}))
    .pipe(babel({
        presets:['@babel/env']
    }))
    .pipe(uglify())
    .pipe(sourcemaps.write())  //sourcemaps结束
    .pipe(gulp.dest('./bundle/js/'))
});

gulp.task('docss1',()=>{
    return gulp
    .src(['./src/css/**/*.css'])
    .pipe(rename({suffix:'.min'}))
    .pipe(cssmin())
    .pipe(gulp.dest('./bundle/css/'))
});

gulp.task('doimg1',()=>{
    return gulp
    .src(['./src/img/**/*.jpg','./src/img/**/*.gif','./src/img/**/*.png'])
    .pipe(imagemin([
        imagemin.gifsicle({interlaced:true}),
        imagemin.jpegtran({propressive:true}),
        imagemin.optipng({optimizationLevel:5}),        
    ]))
    .pipe(gulp.dest('./bundle/img/'))
});

function watchIt(done) {
    livereload.listen()
    gulp.watch('./src/js/**/*.js',  gulp.series('dojs1'))
    gulp.watch('./src/css/**/*.css',  gulp.series('docss1'))
    done()
}

gulp.task('default',gulp.series('dojs1','docss1','doimg1',watchIt));

实现动态修改,实时完成打包工作
【注】: 自定义观察函数watchIt 不需要加''号,在gulp.series()中,加引号的必须是task


动态更新
  • gulp 4.0
    在gulp核心库中中,可以解构出watch和series方法,同样可以实现监测和动态更新效果
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
const babel = require('gulp-babel');
const cssmin = require('gulp-cssmin');
const imagemin = require('gulp-imagemin');
const sourcemaps = require('gulp-sourcemaps');
const concat = require('gulp-concat');
//4.0
const { watch, series } = require('gulp');

gulp.task('dojs1',()=>{
    return gulp
    .src(['./src/js/**/*.js'])
    .pipe(sourcemaps.init())
    .pipe(concat('bundle.min.js'))
    //.pipe(rename({suffix:'.min'}))
    .pipe(babel({
        presets:['@babel/env']
    }))
    .pipe(uglify())
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('./bundle/js/'))
});

gulp.task('docss1',()=>{
    return gulp
    .src(['./src/css/**/*.css'])
    .pipe(rename({suffix:'.min'}))
    .pipe(cssmin())
    .pipe(gulp.dest('./bundle/css/'))
});

gulp.task('doimg1',()=>{
    return gulp
    .src(['./src/img/**/*.jpg','./src/img/**/*.gif','./src/img/**/*.png'])
    .pipe(imagemin([
        imagemin.gifsicle({interlaced:true}),
        imagemin.jpegtran({propressive:true}),
        imagemin.optipng({optimizationLevel:5}),        
    ]))
    .pipe(gulp.dest('./bundle/img/'))
});

//watch
watch('./src/js/**/*.js', series('dojs1'));
watch('./src/css/**/*.css', series('docss1'));

gulp.task('default',gulp.series('dojs1','docss1','doimg1'));

相关文章

  • 相关文章记录

    1.gulp构建工具相关信息 前端自动化构建工具gulp记录Gulp.js-livereload 不用F5了,实时...

  • JavaScript学习笔记(三十六)-- GULP

    GULP gulp 是一个项目开发的 自动化打包构建工具 基于 node 环境来运行的 什么是自动化打包构建工具 ...

  • gulp和webpack的理解

    gulp和webpack都是自动化构建工具。 两者不同点: 1、gulp 是基于流的自动化构建工具, 通常以管道的...

  • gulp入门教程

    gulp是前端的自动化构建工具,gulp的出现是希望能取代grunt,成为最流行的前端自动化构建工具,它与grun...

  • 1,node.js

    自动化构建工具 gulp webpack grunt gulp--构建项目,压缩合并处理,依赖于 gulpf...

  • gulp 基本的使用

    今天说说自动化构建工具gulp的使用,gulp其实是一个非常简单的自动化构建工具,它的作用有编译代码、压缩代码、热...

  • ES6项目构建方法

    任务自动化(gulp) gulp:自动化构建工具;任务自动化,就是说,尽量不使用人工,使用工具自动操作一些任务;g...

  • gulp

    gulp解释 GULP 是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器。GULP 是 基 于 Nod...

  • 『前端工程化』gulp(gulp3 && gul

    Gulp 什么是Gulp Gulp是基于Node.js的构建工具,我们使用它来集成前端开发环境,来构建自动化工作流...

  • gulp总结

    gulp gulp 是基于stream的自动化构建工具 官网 https://www.gulpjs.com.cn/...

网友评论

      本文标题:自动化构建工具 gulp

      本文链接:https://www.haomeiwen.com/subject/sanpsctx.html