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

本文介绍了Gulp 3.0的基础知识,包括与Webpack的区别、安装步骤和使用方法,如js压缩、合并、Babel编译、css压缩、sourcemap、图片压缩、watch功能及livereload的配置,旨在帮助读者快速掌握Gulp自动化构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Gulp和Webpack的基本区别

gulp基于‘流’; webpack基于‘万物皆为模块’:

gulp可以进行js,html,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加快请求速度和减少请求次数;并且gulp有task定义处理事务,从而构建整体流程,它是基于流的自动化构建工具。

Webpack是前端构建工具,实现了模块化开发和文件处理。他的思想就是“万物皆为模块”,它能够将各个模块进行按需加载,不会导致加载了无用或冗余的代码。所以他还有个名字叫前端模块化打包工具。

2. Gulp安装

>全局的:npm i gulp -g 启动器

>本地的:npm i gulp 核心库

 

3. Gulp使用

新建项目名称gulp-project, npm init, 新建文件gulpfile.js, 然后全局和本地安装gulp。

(1) gulp压缩js

gulp-project下新建src, src下新建js文件夹,安装npm i gulp-uglify。

文件目录:

package.json:

{
    "name": "gulp-project",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {},
    "dependencies": {
        "gulp": "^3.9.1",
        "gulp-uglify": "^3.0.1"
    }
}

1.js:

function sum(a, b) {
    var sumNum = a + b
    console.log(sumNum)
}
sum(12, 13);

控制台运行gulp. src下就生成了dist目录以及压缩后的1.js

 

(2) gulp压缩合并

默认有多少文件就会压缩多少文件,有时候我们需要压缩合并。

npm install gulp-concat

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');

gulp.task('js', ()=>{
  return gulp.src(['./src/js/*.js'])
    .pipe(concat('bundle.min.js'))    // concat会作合并,合并为1个js
    .pipe(uglify())
    .pipe(gulp.dest('./dist/js/'));
});

gulp.task('default', ['js']);

(3) gulp bable编译

在1.js 里面写上es6的语法进行打包,就会报错。因为没有对es6的进行babel编译

 

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');

gulp.task('js', ()=>{
  return gulp.src(['./src/js/*.js'])
    // babel编译
    .pipe(babel({
        presets: ['@babel/env']
    }))
    .pipe(concat('bundle.min.js'))    // concat会作合并,合并为1个js
    .pipe(uglify())
    .pipe(gulp.dest('./dist/js/'));
});

gulp.task('default', ['js']);

(4) gulp 压缩css

npm install gulp-cssmin

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const cssmin=require('gulp-cssmin');

gulp.task('js', ()=>{
  return gulp.src(['./src/js/*.js'])
    // babel编译
    .pipe(babel({
        presets: ['@babel/env']
    }))
    // concat会作合并,合并为1个js
    .pipe(concat('bundle.min.js'))    
    .pipe(uglify())
    .pipe(gulp.dest('./dist/js/'));
});


gulp.task('style', ()=>{
    return gulp
      .src(['./src/css/**/*.css'])
      .pipe(concat('style.min.css'))
       // cssmin css压缩
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'));
  });


gulp.task('default', ['js', 'style']);

(5). gulp  sourcemap源码解析

经过压缩的代码如果语法出了错, 开发者很难定位哪里出了错。用sourcemap就可以源码反解析,很容易代码定位错误的地方

 

npm install gulp-sourcemaps

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const cssmin=require('gulp-cssmin');
const sourcemaps=require('gulp-sourcemaps');

gulp.task('js', ()=>{
  return gulp.src(['./src/js/*.js'])
    .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/'));
});


gulp.task('style', ()=>{
    return gulp
      .src(['./src/css/**/*.css'])
      .pipe(concat('style.min.css'))
       // cssmin css压缩
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'));
  });


gulp.task('default', ['js', 'style']);

(6). gulp 压缩图片

npm install gulp-imagemin

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const cssmin=require('gulp-cssmin');
const sourcemaps=require('gulp-sourcemaps');
const imagemin=require('gulp-imagemin');

gulp.task('js', ()=>{
  return gulp.src(['./src/js/*.js'])
    .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/'));
});


gulp.task('style', ()=>{
    return gulp
      .src(['./src/css/**/*.css'])
      .pipe(concat('style.min.css'))
       // cssmin css压缩
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'));
});

gulp.task('image', ()=>{
    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('default', ['js', 'style', 'image']);

(7). gulp watch

每次都手动执行 gulp命令。是不是很烦,gulp有watch功能,当js代码改变后自动触发编译

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const cssmin=require('gulp-cssmin');
const sourcemaps=require('gulp-sourcemaps');
const imagemin=require('gulp-imagemin');

const js_path=['./src/js/**/*.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/'));
});


gulp.task('style', ()=>{
    return gulp
      .src(['./src/css/**/*.css'])
      .pipe(concat('style.min.css'))
       // cssmin css压缩
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'));
});

gulp.task('image', ()=>{
    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('watch', ()=>{
    gulp.watch(js_path, ['js']);
});

gulp.task('default', ['js', 'style', 'image', 'watch']);

控制台输入gulp watch, 改变js代码就会重新编译。

 

(8) livereload

8.1、说明:谷歌浏览器安装插件需要FQ,我已经下载了最新版本2.1.0到本地,点击下载(谷歌为.crx文件,火狐为.xpi文件)

8.2、安装方法:谷歌浏览器安装crx插件方法、火狐浏览器直接将xpi文件拖进浏览器即可安装

8.3、命令行执行: gulp watch

8.4、以服务器的方式打开页面,例如http://localhost:4444,而不是file:///D:/gulp-project/src/index.html,否则无法启动livereload浏览器插件

8.5、点击livereload浏览器插件即可启动,如下图:

 

如果不想安装插件也可以用node起个服务, 或者vscode下载Live Server:

命令行执行:gulp

点击vscode的Go Live即可

 

 

附上完整代码:

package.json

{
    "name": "gulp-project",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {},
    "dependencies": {
        "@babel/core": "^7.1.6",
        "@babel/preset-env": "^7.1.6",
        "gulp": "^3.9.1",
        "gulp-babel": "^8.0.0",
        "gulp-uglify": "^3.0.1",
        "gulp-concat": "^2.6.1",
        "gulp-cssmin": "^0.2.0",
        "gulp-sourcemaps": "^2.6.4",
        "gulp-imagemin": "^5.0.3",
        "gulp-livereload": "^4.0.0"
    }
}

index.html:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="../dist/css/style.min.css" type="text/css"/>
    <script>
    document.write(`<script src="../dist/js/bundle.min.js?t=${Math.random()}" charset="utf-8"></sc`+`ript>`)
    </script>
  </head>
  <body>
    aaabbbbdfasd1111
    <div class="div1">22222</div>
  </body>
</html>

gulpfile.js

const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const cssmin=require('gulp-cssmin');
const sourcemaps=require('gulp-sourcemaps');
const imagemin=require('gulp-imagemin');
const livereload=require('gulp-livereload');

const js_path=['./src/js/**/*.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(livereload());
});


gulp.task('style', ()=>{
    return gulp
      .src(['./src/css/**/*.css'])
      .pipe(concat('style.min.css'))
       // cssmin css压缩
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'))
      .pipe(livereload());
});

gulp.task('image', ()=>{
    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('watch', ()=>{
    //开启livereload的服务
    livereload.listen();
    gulp.watch(js_path, ['js']);
    let css_path = ['./src/css/**/*.css']
    gulp.watch(css_path, ['style']);
    //监听html;标记文件修改
    gulp.watch([
        './src/index.html',
        ...js_path, ...css_path
    ], file=>{
        livereload.changed(file.path);
    });
});

gulp.task('default', ['js', 'style', 'image', 'watch']);

目录:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值