关于Gulp,你学这些就够了

Gulp 是一个基于流(Stream)的构建工具,用于自动化前端开发中的常见任务(如文件压缩、编译、自动化测试等)。它的设计理念是将任务流程处理成数据流,通过管道(Pipeline)处理数据,以达到自动化构建的目的。

现在对 gulp 的使用已经很少了,但是有些面试官在面试的时候还是会问,因此单独写一篇文章来讲一下。

1. Gulp 的基本概念

  • **流(Stream)**:Gulp 通过流的方式来处理文件,可以让文件在内存中进行操作,而不需要频繁的读写磁盘。
  • **任务(Task)**:每个 Gulp 操作叫做一个任务,任务可以包含一个或多个操作(如文件压缩、文件合并等)。
  • **管道(Pipe)**:Gulp 使用管道来连接多个任务,以此形成工作流。管道是任务之间的流动路径,每个任务输出的结果作为下一个任务的输入。

2. 安装 Gulp

首先,确保你已经安装了 Node.js,然后通过 npm 安装 Gulp。

Bash 复制代码
# 安装 Gulp CLI(命令行工具)
npm install --global gulp-cli

# 在项目中安装 Gulp 本地依赖
npm install --save-dev gulp

3. 创建 Gulp 任务

gulp 任务函数可以接受一个 callback 作为参数,调用 callback 函数那么任务会结束;或者是一个返回 stream、promise、event emitter、child process 或 observable 类型的函数。

一套流程 = src → pipe(plugin) → pipe(plugin) → dest

以下写法均为:gulp4+ 版本的最新写法。

1)定义一个任务(Task)

JavaScript 复制代码
function hello(cb) {
  console.log("Gulp run ok");
  cb(); // 表示任务完成
}
exports.hello = hello;

运行:

Bash 复制代码
gulp hello

2)处理 CSS / Sass

Bash 复制代码
npm i gulp-sass sass gulp-clean-css gulp-autoprefixer -D
JavaScript 复制代码
const { src, dest } = require("gulp");
const sass = require("gulp-sass")(require("sass"));
const cleanCSS = require("gulp-clean-css");
const autoprefixer = require("gulp-autoprefixer");

function styles() {
  return src("src/scss/*.scss")
    .pipe(sass())                // scss -> css
    .pipe(autoprefixer())        // 自动加前缀
    .pipe(cleanCSS())            // 压缩 css
    .pipe(dest("dist/css"));
}

exports.styles = styles;

运行:

Bash 复制代码
gulp styles

3)压缩 / 合并 JS

Bash 复制代码
npm i gulp-uglify gulp-concat -D
JavaScript 复制代码
const uglify = require("gulp-uglify");
const concat = require("gulp-concat");

function scripts() {
  return src("src/js/*.js")
    .pipe(concat("app.min.js")) // 合并
    .pipe(uglify())             // 压缩
    .pipe(dest("dist/js"));
}

exports.scripts = scripts;

4)压缩图片

Bash 复制代码
npm i gulp-imagemin -D
JavaScript 复制代码
const imagemin = require("gulp-imagemin");

function images() {
  return src("src/images/*")
    .pipe(imagemin())   // 压缩图片
    .pipe(dest("dist/images"));
}

exports.images = images;

5)监听文件修改

JavaScript 复制代码
const { watch } = require("gulp");

function dev() {
  watch("src/scss/*.scss", styles);
  watch("src/js/*.js", scripts);
  watch("src/images/*", images);
}

exports.dev = dev;

运行:

Bash 复制代码
gulp dev

文件一改 → 自动构建

6)组合任务 series / parallel

示例:

JavaScript 复制代码
const { series, parallel } = require("gulp");

exports.build = series(styles, scripts, images);   // 先后执行
exports.all    = parallel(styles, scripts, images); // 同时执行

运行:

Bash 复制代码
gulp build

7)默认任务(直接 gulp

JavaScript 复制代码
exports.default = series(styles, scripts, images, dev);

执行:

Bash 复制代码
gulp

常用 gulpfile.js

JavaScript 复制代码
const { src, dest, series, parallel, watch } = require("gulp");
const sass = require("gulp-sass")(require("sass"));
const cleanCSS = require("gulp-clean-css");
const uglify = require("gulp-uglify");
const concat = require("gulp-concat");
const imagemin = require("gulp-imagemin");
const autoprefixer = require("gulp-autoprefixer");

// CSS处理
function styles() {
  return src("src/scss/*.scss")
    .pipe(sass())
    .pipe(autoprefixer())
    .pipe(cleanCSS())
    .pipe(dest("dist/css"));
}

// JS处理
function scripts() {
  return src("src/js/*.js")
    .pipe(concat("app.min.js"))
    .pipe(uglify())
    .pipe(dest("dist/js"));
}

// 图片压缩
function images() {
  return src("src/images/*")
    .pipe(imagemin())
    .pipe(dest("dist/images"));
}

// 监听
function dev() {
  watch("src/scss/*.scss", styles);
  watch("src/js/*.js", scripts);
  watch("src/images/*", images);
}

exports.default = series(
  parallel(styles, scripts, images),
  dev
);
相关推荐
GDAL7 小时前
html返回顶部实现方式对比
前端·html·返回顶部
Violet_YSWY7 小时前
ES6 () => ({}) 语法解释
前端·ecmascript·es6
C雨后彩虹7 小时前
字符串拼接
java·数据结构·算法·华为·面试
LYFlied7 小时前
【每日算法】LeetCode 279. 完全平方数(动态规划)
前端·算法·leetcode·面试·动态规划
小北方城市网7 小时前
第7课:Vue 3应用性能优化与进阶实战——让你的应用更快、更流畅
前端·javascript·vue.js·ai·性能优化·正则表达式·json
向下的大树7 小时前
React 环境搭建 + 完整 Demo 教程
前端·react.js·前端框架
2501_916007477 小时前
React Native 混淆在真项目中的方式,当 JS 和原生同时暴露
javascript·react native·react.js·ios·小程序·uni-app·iphone
IT_陈寒7 小时前
Python性能翻倍的5个隐藏技巧:让你的代码跑得比同事快50%
前端·人工智能·后端
Можно7 小时前
GET与POST深度解析:区别、适用场景与dataType选型指南
前端·javascript
爱上妖精的尾巴7 小时前
5-41 WPS JS宏 数组迭代基础测试与双数组迭代的使用方法测试
前端·javascript·wps