Gulp -- 项目的愿景、过去和将来

Gulp -- 项目的愿景、过去和将来

本文翻译自gulp -- The vision, history, and future of the project

gulp是一个将vinyl、vinyl-fs、orchestrator、命令行工具以及一系列用于帮助开发者构建优秀插件的指导方针等集于一身的小巧构建工具。尽管它功能很少,但它却完全打破了构建工具生态体系,并通过许多优秀的项目掀起了一股改革你的工作流程的浪潮。

下面我们就来介绍gulp背后的各个部分以及它们所起到的作用。

流是一种将多个小的变换操作进行组合,连接成管道的一种方式。你将数据丢入管道顶部,它将下落并穿过所有的变换,最后在底部得到你想要的内容。流系统的灵活性能够很好地解决文件变换需求。

想获得更多关于流的信息,请查阅substack的流操作手册

Vinyl

Vinyl是一个用来描述文件的简单元数据对象。当你想要使用一个文件时,首先映入脑海的是文件的两个属性:路径和内容。这两个属性就是一个Vinyl对象的主要属性。这里的文件并不一定是指你的文件系统里的文件。你在S3、FTP、Dropbox、Box、CloudThingly.io或者其他服务上的文件,一样可以使用Vinyl来描述。

Vinyl Adapters(Vinyl适配器)

既然Vinyl提供了一个清晰的方法用来描述文件,我们现在还需要找到访问这些文件的方式。每一种文件源我们都需要一个“Vinyl适配器”。一个Vinyl适配器只需要暴露三个方法:.src(globs).dest(folder)、和一个.watch(globs, fn)。src流负责产生文件对象,而dest流负责消费这些文件对象。

表面上看人们已经理解了“gulp插件”(一个transform形式的流)的概念,但Vinyl适配器的理念却没有被广泛传播。除非自己开发一些适配器,否则无法得知适配器是如何引用文件源中的内容。。通过Vinyl适配器来实现gulp,并将其作为一个开发工具的想法非常奇妙。

vinyl-fs

如果你使用gulp,你已经使用了vinyl-fs模块。它是用来适配本地文件系统的适配器。

vinyl-s3

vinyl-s3尚不存在,但gulp-s3已经实现了。它无法提供所有的功能,但它是了一个不错的权宜方案。

Orchestrator

在写这篇文章时,目前的任务系统是Orchestrator 0.3。Orchestrator提供了简单的方式去定义任务和依赖,并能够在依赖树为基础的前提下以最大并发数去与并发执行这些任务。Orchestrator虽然工作良好,但它复杂的依赖管理给用户带来不小的麻烦。Orchestrator为了配合gulp的理念而做了巨大的调整:更加轻量、低复杂度,以及可组合的功能性API。

这里简要介绍一下gulp 4带来的变化:
1. 你可以任意指定任务顺序,并行/串行的任意组合都随心所欲。只有想不到,没有做不到
2. API将非常流畅和友好
3. 代码更加简洁

非常感谢Blaine Bublitz在这方面积极的努力。

错误处理

实话告诉你:gulp现在的错误处理很烂。我从不期望能从报错信息中获得一点有用的信息。使用gulp的过程中,你可能会遭遇两种错误:

任务失败

watch时出现任务失败,内部将会一团糟,然后线程会退出,具体的退出方式要取决你如何启动这个任务。这种情况非常糟糕,完全不应该发生,在新的任务系统中将对这些进行修复。

管道失败

标准的流在遭遇错误时仅仅会停止工作。而像linter(代码风格检测)这样的任务,问题就来了。我想看到所有的代码风格提示,而不只是第一个文件里的那些。技术上其实是因为unpipe事件。本质上看,当一个流遇到错误,它将会触发unpipe事件,这个事件将告诉其他流不再向它写入数据。目前有一些hack的解决方法如gulp-plumber,可以作为权宜之计,但我很高兴的说,我将会把这些集成到gulp核心之中去。

这些问题我会在下个release版本最优先解决。

社区

从一个局外人的角度来看,人们都能参与到这场文件转换工具的战斗之中,实在有些疯狂。虽然外人看来可能有些无趣,但成为这个激情小组的一部分绝对令人振奋。我很自豪社区能够接纳这个工具并对人们的日常生活带来帮助。

进展

想要跟踪gulp 4的进展,你可以在github上查看里程碑

小广告:更多内容欢迎来我的博客,共同探讨


尘世间一个迷途的小码农

5.3k 声望
564 粉丝
0 条评论
推荐阅读
聊一聊前端自动化测试
以前不喜欢写测试,主要是觉得编写和维护测试用例非常的浪费时间。在真正写了一段时间的基础组件和基础工具后,才发现自动化测试有很多好处。测试最重要的自然是提升代码质量。代码有测试用例,虽不能说百分百无b...

天镶63阅读 24.5k评论 14

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木75阅读 7.1k评论 16

从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木45阅读 8.5k评论 6

从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木35阅读 6.7k评论 10

从零搭建 Node.js 企业级 Web 服务器(五):数据库访问
回顾 从零搭建 Node.js 企业级 Web 服务器(一):接口与分层,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,控制层与服务层实现了业务处理过程,模型层定义了业务实体并以 对象-关系...

乌柏木34阅读 5k评论 9

2022大前端总结和2023就业分析
我在年前给掘金平台分享了《2022年热点技术盘点》的前端热点,算是系统性的梳理了一下我自己对前端一整年的总结。年后,在知乎上看到《前端的就业行情怎么样?》,下面都是各种唱衰前端的论调,什么裁员,外包化...

i5ting27阅读 2.3k评论 4

封面图
从零搭建 Node.js 企业级 Web 服务器(十三):断点调试与性能分析
Node.js 官方提供了断点调试机制,出于安全性考虑默认为关闭状态,可以通过 node 参数 --inspect 或 --inspect-brk 开启,配合 IDE 能够非常方便地调试代码,本章就上一章已完成的项目 licg9999/nodejs-server-ex...

乌柏木31阅读 4.2k评论 9

尘世间一个迷途的小码农

5.3k 声望
564 粉丝
宣传栏