Gulp进阶之路:从任务创建到高效管理的秘诀

1. 什么是 Gulp

Gulp 是一个前端开发过程中的自动化构建工具,基于 Node.js 的流。它使用流来处理文件,使构建过程更为高效。Gulp 的核心理念是"代码优于配置",通过最少的 API 让任务编写变得简单,同时使得复杂的任务也可管理。利用 Gulp,开发者可以自动化完成前端代码的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。

在 Gulp 中,每个功能都被视为一个任务,如压缩 CSS 的任务或合并文件的任务,这些任务被写在一个叫做 gulpfile.js 的文件中。这个文件用于配置所有任务,其中导出的任务被称为公开任务,可以通过 gulp 命令直接调用,Gulp 是一个强大的工具,可以大大提高前端开发的工作效率

2. Gulp 可以做什么

它是基于 Nodejs,自动化地完成 javascript、coffee、sass、less、html/image、css 等文件的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。

2.1 缺点

  • 不支持 tree-shaking、热更新、代码分割等;
  • gulp 对 js 模块化方案无能为力,只是对静态资源做流式处理,处理之后并未做有效的优化整合。

3. Gulp 安装

  1. 必要环境:Node,npm, npx 这里就不在赘述如何安装
  2. 安装 gulp:npm install --save-dev gulp

4. js 和 gulp

(1) 你可以使用 JavaScript 的知识来编写 gulpfile (2) 可以使用转译语言编写 gulpfile 使用 TypeScript 则文件为 gulpfile.ts,然后安装 ts-node 模块 使用 Babel 则文件为 gulpfile.babel.js,然后安装 @babel/register 模块 (3) gulpfile 可以分割为多个文件,将每个任务拆开,然后再导入带 gulpfile 中,这可以避免单个文件非常的大。

5. 如何创建任务

gulp 任务都是异步 js 函数,接受错误回调,streams,promise,event emitter,子进程或可观察的函数(watch),所以当你完成任务后需要返回的类型需要注意,这里给个简单的例子:

gulpfile.js 复制代码
const { src, dest } = require('gulp');

function streamTask() {
  return src('*.js')
  // 管道将 src 读取的文件Vinyl 对象的流传递给 dest()
    .pipe(dest('output'));
}

exports.default = streamTask;

要知道如何创建任务首先需要了解任务类型: gulp 的任务类型分为公共任务和私有任务,公共任务和私有任务的主要区别在于它们的可访问性和使用方式。

(1) 公共任务(Public Tasks):

  • 公共任务是从 gulpfile.js 文件中通过 exports 导出的任务。由于它们被导出,因此可以在命令行中直接通过 gulp 命令调用。
  • 这些任务通常用于那些需要用户直接执行或作为构建过程的一部分经常调用的任务,如编译 SASS、压缩图片等。
  • 公共任务的编写和导出使得它们对于使用 Gulp 的用户来说是可见的,并且可以通过简单的命令执行。

(2) 私有任务(Private Tasks):

  • 私有任务是在 gulpfile.js 中定义但未被直接导出的任务。它们通常作为 series()或 parallel()组合的组成部分,用于构建更复杂的任务流。
  • 私有任务在外观和行为上与公共任务相同,但用户不能直接通过命令行调用它们。它们主要在内部被其他任务调用,以执行特定的构建步骤或操作。
  • 私有任务的存在允许开发者将复杂的构建逻辑分解为更小、更易于管理的部分,并在需要时组合这些部分来创建更复杂的构建任务。

公共任务是那些可以从命令行直接调用的任务,而私有任务则是作为其他任务组成部分的内部任务,不能直接从命令行调用。这种区分使得开发者能够更灵活地组织和管理他们的构建过程,同时保持命令行接口的简洁和清晰。

gulpfile.js 复制代码
const { series } = require("gulp");

// 私有任务,没有导出
function clean(cb) {
  cb();
}

// 共有任务
function build(cb) {
  cb();
}

export.build = build;
// 可以理解为进行一系列的操作,不是并行的,按顺序执行
export.default = series(clean, build);

5.1 一些常用的 api

(1) series 串行执行

(2) parallel 并行执行

(3) src 读取文件

(4) dest 写入文件

(5) task 创建任务

(6) watch 监听文件

详细的 api 解释和更多请看这里

相关推荐
程序员爱技术1 小时前
Vue 2 + JavaScript + vue-count-to 集成案例
前端·javascript·vue.js
并不会2 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
悦涵仙子2 小时前
CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量
javascript·css·sass
衣乌安、2 小时前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜2 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
低代码布道师2 小时前
CSS的三个重点
前端·css
耶啵奶膘3 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^5 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie6 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic6 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js