Skip to content

Gulp 简介

gulp 是基于流/node 的自动化构建工具,主要使用管道传输机制,常用命令:

  • gulp.src 指定需要打包的文件的入口
  • gulp.pipe 指定插件处理文件
  • gulp.dest 指定打包之后文件的输出路径
  • gulp.task 注册任务
  • gulp.series 串联执行多个任务
  • gulp.parallel 并行执行多个任务
  • gulp.watch 监控文件变动,然后执行操作
  • gulp.symlink 创建一个流(stream),用于连接 Vinyl 对象到文件系统。
  • gulp.lastRun 检索在当前运行进程中成功完成任务的最后一次时间.当与 src() 组合时,通过跳过自上次成功完成任务以来没有更 改的文件,使增量构建能够加快执行时间
  • gulp.tree 获取当前任务依赖关系树——在极少数情况下需要它。
  • gulp.registry 将自定义注册表插入到任务系统中,从而提供共享任务或增强功能

Gulp 常用插件:

  • del 清空 build 目录
  • gulp-babel ES6 转换为 ES5
  • gulp-concat 合并文件
  • gulp-uglify 压缩 js 文件
  • gulp-rename 文件重命名
  • gulp-htmlmin 压缩 js 文件
  • gulp-less less 文件转换为 css 文件
  • gulp-clean-css 压缩 css 文件
  • gulp-imagemin 压缩图片
  • gulp-rename 修改输入文件名
  • gulp-if 根据条件处理文件

Gulp 配置

根目录下创建一个名为 gulpfile.js 的文件,项目根目录执行gulp命令,会获取并执行task:

js
//安装好 gulp 命令行工具 npm install --global gulp-cli
const gulp = require("gulp");
const htmlmin = require("gulp-htmlmin");
const uglify = require("gulp-uglify"); // 压缩js
const minifyCss = require("gulp-minify-css");
const imagemin = require("gulp-imagemin");
const babel = require("gulp-babel");
const clean = require("gulp-clean");
const pump = require("pump");
const connect = require("gulp-connect"); // gulp微服务

let dir = "./distLWebProject/src/"; // 目标路径

/** 压缩 主页html文件
 * 每个 gulp 任务(task)都是一个异步的 JavaScript 函数
 * callback 返回 streams、promises、event emitters、child processes, 或 observables
 * 当前callback返回stream
 */
gulp.task("html", function () {
  return gulp
    .src("./src/*.html")
    .pipe(
      htmlmin({
        collapseWhitespace: true, //清除html文件的空格
        minifyJS: true, //压缩html文件的js代码
        minifyCSS: true, //压缩html文件的css代码
        removeComments: true, //清除html文件的注释
        removeSciptTypeAttributes: true, //清除所有script标签中的type="text/javascript"属性
        removeStyleLinkTypeAttributes: true, //清楚所有Link标签上的type属性
      })
    )
    .pipe(gulp.dest(dir)); //最后输出文件保存在dist文件根目录中
});

// 压缩子页面的html
gulp.task("page", function () {
  return gulp
    .src("./src/page/app/**/*.html")
    .pipe(
      htmlmin({
        collapseWhitespace: true,
        minifyJS: true,
        minifyCSS: true,
        removeComments: true,
        removeSciptTypeAttributes: true,
        removeStyleLinkTypeAttributes: true,
      })
    )
    .pipe(gulp.dest(dir + "page/app"));
});

// 压缩js文件
gulp.task("js", function () {
  return gulp
    .src("./src/page/js/**/*.js")
    .pipe(
      babel({
        presets: ["@babel/preset-env"],
      })
    )
    .pipe(uglify())
    .pipe(gulp.dest(dir + "page/js"));
});

//压缩css文件
gulp.task("css", function () {
  return gulp
    .src("./src/assets/css/**/*.css")
    .pipe(minifyCss())
    .pipe(gulp.dest(dir + "assets/css/"));
});

//压缩图片
gulp.task("img", function () {
  return gulp
    .src("./src/assets/img/**/*.*")
    .pipe(imagemin({ progressive: true }))
    .pipe(gulp.dest(dir + "assets/img"));
});

// 压缩config文件夹
gulp.task("config", function () {
  return gulp
    .src("./src/config/*.js")
    .pipe(
      babel({
        presets: ["@babel/preset-env"],
      })
    )
    .pipe(uglify())
    .pipe(gulp.dest(dir + "config"));
});

// 压缩router文件夹
gulp.task("router", function () {
  return gulp
    .src("./src/router/*.js")
    .pipe(
      babel({
        presets: ["@babel/preset-env"],
      })
    )
    .pipe(uglify())
    .pipe(gulp.dest(dir + "router"));
});

// 压缩sysPage文件夹
gulp.task("sysPage", function () {
  return gulp
    .src("./src/sysPage/**/*.html")
    .pipe(
      htmlmin({
        collapseWhitespace: true,
        minifyJS: true,
        minifyCSS: true,
        removeComments: true,
        removeSciptTypeAttributes: true,
        removeStyleLinkTypeAttributes: true,
      })
    )
    .pipe(gulp.dest(dir + "sysPage"));
});

// 压缩third文件夹
gulp.task("third", function () {
  return gulp.src("./src/third/**/*").pipe(gulp.dest(dir + "third"));
});

// 压缩utils文件夹
gulp.task("utils", function () {
  return gulp
    .src("./src/utils/*.js")
    .pipe(
      babel({
        presets: ["@babel/preset-env"],
      })
    )
    .pipe(uglify())
    .pipe(gulp.dest(dir + "utils"));
});

// 删除旧包
gulp.task("clean", function (cb) {
  pump([gulp.src(dir), clean()], cb);
});

// 使用connect启动一个Web服务器
gulp.task("serve", function () {
  connect.server({
    host: "localhost",
    port: 3000,
    open: "./index.html",
    root: "src/",
    livereload: true,
  });
});

// 默认命令
gulp.task(
  "default",
  // 串联执行多个命令
  gulp.series(
    "clean",
    "html",
    "page",
    "js",
    "css",
    "img",
    "config",
    "router",
    "sysPage",
    "third",
    "utils",
    done => {
      done();
    }
  )
);

// or  exports.build= gulp.series()

根据 MIT 许可证发布