gulp4.0入门, 看这一篇就够了

2023-10-31

前言

之前我们讲了gulp3.0, 这篇引入gulp4.0, 4.0相比3.0有一些改变的地方:

gulp3.0压缩顺序默认是顺序执行的,4.0引入压缩并行的处理方式:

gulp.series|4.0 依赖顺序执行

gulp.parallel|4.0 多个依赖嵌套'html','css','js'并行

因为之前一步步说了怎么压缩js\ css\image等,此处直接上代码:

gulpfile.js:

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const sourcemaps=require('gulp-sourcemaps');
const cssmin=require('gulp-cssmin');
const imagemin=require('gulp-imagemin');
const htmlmin = require('gulp-htmlmin');
const connect=require('gulp-connect');
const clean=require('gulp-clean');
const revCollector = require('gulp-rev-collector');
const js_path=['./src/js/**/*.js'];
// 压缩html
gulp.task('html',function(){
    const options = {
        collapseWhitespace:true,
        collapseBooleanAttributes:true,
        removeComments:true,
        removeEmptyAttributes:true, //清除所有的空属性
        removeScriptTypeAttributes:true,
        removeStyleLinkTypeAttributes:true,
        minifyJS:true,//压缩html中的javascript代码。
        minifyCSS:true //压缩html中的css代码。
    };
    return gulp.src('./src/*.html')
    .pipe(htmlmin(options))
    .pipe(revCollector({
        replaceReved:true
    }))
    .pipe(gulp.dest('./dist'))
    .pipe(connect.reload());
})
// 压缩js
gulp.task('js', ()=>{
  return gulp.src(js_path)
    .pipe(sourcemaps.init())
    // babel编译
    .pipe(babel({
        presets: ['@babel/env']
    }))
    // concat会作合并,合并为1个js
    .pipe(concat('bundle.min.js'))    
    .pipe(uglify())
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('./dist/js/'))
    .pipe(connect.reload());
});
// 压缩style-css
gulp.task('style', ()=>{
    return gulp
      .src(['./src/css/**/*.css'])
      .pipe(concat('style.min.css'))
       // cssmin css压缩
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'))
      .pipe(connect.reload());
});
// 压缩images
gulp.task('images', ()=>{
    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('./dist/img/'));
});
gulp.task('watchs',function(){
    gulp.watch('./src/*.html', gulp.series('html'));
    gulp.watch('./src/css/**/*.css', gulp.series('style'));
    gulp.watch('./src/js/**/*.js', gulp.series('js'));
});
gulp.task('connect:app',function(){
    connect.server({
        root:'src',//根目录
        // ip:'192.168.3.162', 默认localhost
        livereload:true,//自动更新
        port:9999//端口
    })
})
gulp.task('connect:dist',function(cb){
    connect.server({
        root:'src',
        livereload:true,
        port:9999
    })
    cb(); //执行回调,表示这个异步任务已经完成,起通作用,这样会执行下个任务
})
gulp.task('clean:app', function() {
    return gulp.src('dist', {read: false})
        .pipe(clean());
})
//gulp.series|4.0 依赖顺序执行
//gulp.parallel|4.0 多个依赖嵌套'html','css','js'并行
gulp.task('default', gulp.series(gulp.parallel('html','style','js','images')));
gulp.task('init', gulp.series('clean:app', gulp.parallel('html','style','js','images')));
//启动任务connect:app服务,并监控变化
gulp.task('dev', gulp.series('init', 'connect:app', 'watchs'));
// 生成打包文件
gulp.task('build', gulp.series('init'));
//启动任务connect:dist服务,生成打包文件后,监控其变化
gulp.task('server', gulp.series('connect:dist', 'build', 'watchs'));

package.json:

{
  "name": "gulp-project4.0",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "gulp dev",
    "build": "gulp build",
    "server": "gulp server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.4.5",
    "@babel/preset-env": "^7.4.5",
    "gulp": "^4.0.2",
    "gulp-babel": "^8.0.0",
    "gulp-clean": "^0.4.0",
    "gulp-concat": "^2.6.1",
    "gulp-connect": "^5.7.0",
    "gulp-cssmin": "^0.2.0",
    "gulp-htmlmin": "^5.0.1",
    "gulp-imagemin": "^6.0.0",
    "gulp-rev-collector": "^1.3.1",
    "gulp-sourcemaps": "^2.6.5",
    "gulp-uglify": "^3.0.2"
  }
}

执行gulp, 会执行default任务

执行npm run dev, 执行dev任务,其它类似

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gulp4.0入门, 看这一篇就够了 的相关文章