这篇文章不会介绍 gulp
的起源、发展;不会去一个个讲解 gulp API
;也不想出现大段大段的 gulpfile.js
代码;更木有帮你分析 gulp
实现原理,只有一些我自己对 gulp
的使用理解和总结。
如何通过
gulp
让偶们的前端项目高大上的跑起来?gulp
能做什么,还能做什么?gulp
套路能不能来几套?... 希望通过这篇文章你会找到答案
写作风格的原因,劳资写的文章都较详(啰)细(嗦),请轻拍:)
当然,同样期待能得到伙伴们的讨论和支持。
目录
简单介绍
这篇文章的目的是:介绍些我知晓的
gulp plugins
,然后用少量的代码讲解,最终希望大家能用gulp
让前端项目高大上的跑起来
默认读者知道点
npm/cnpm
;明白package.json
是作甚的;了解gulpfile.js
是作甚的。
这篇文章起草于2014年下半年,那时 gulp
还算个较新潮的玩意。所以在项目实践的过程中,自己记录鸟不少使用收获,心里闷骚的想,等哪天有空再润色一把即可分享出去,但特么拖拖拉拉的就到2016年...
转眼 gulp
都已快被归类为过时的技术鸟(《我为何放弃Gulp与Grunt,转投npm scripts》,有关这篇文章下一篇偶再单独细聊),于是趁着周末之余,火速整理下自己的 gulp
套路发布出来,也希望对其他小伙伴有点用。
本文最下方有一些 文章/文档 的阅读推荐:)
必备插件
【必备】不是指每次项目都得用,而是指最基础的。你可以不用,但是得知道的那些gulp插件
以下插件的方向都各自有不少相似的插件,所以不必过多纠结,用的开心就行
-
gulp-htmlmin 看到名字就能知道,这个插件是用来压缩
HTML
。PS:注释啥的都可以去掉哦,看文档get更多技能哈 -
gulp-imagemin 除了能压缩常见的图片格式,还能压缩
SVG
,叼叼的~ -
gulp-clean-css 压缩 CSS。我原本推荐的是 gulp-minify-css,结果其首页中已建议改用
gulp-clean-css
... - gulp-uglify 专业压缩 Javascript
- gulp-concat 上面几个都是压缩,这插件是管合并的...恭喜,“减少网络请求”的成就达成:)
- gulp-autoprefixer 给 CSS 增加前缀。解决某些CSS属性不是标准属性,有各种浏览器前缀的情况,灰常有用
-
gulp-rename 修改文件名称。比如有时我们需要把
app.js
改成app.min.js
,瞬间高级了 - gulp-util 最基础的工具,但俺只用来打日志...
常用插件
相对于必备插件,常用插件都是些【有用】但使用场景和频率没那么高的好插件
-
run-sequence
gulp
的task
都是并行(异步)执行,如果遇见需要串行的场景,那么这个插件就是必备了。偶的使用场景是:处理(压缩、合并等等)CSS/JS
、再gulp-rev、再上传CDN
;然后使用CDN
的地址替换HTML
中的CSS/JS
地址,再压缩HTML
。那么替换HTML
这步须在之前的工作处理完后再执行。 ** 最后要说,gulp4.0发布后,不需要RS也可以搞定串行任务了 ** -
del / gulp-clean 删除。俺的使用场景是:
JS/CSS
文件都会在压缩后使用gulp-rev,即文件名被hash
,然后再上传到CDN
,最后俺再使用 删除插件 把本地压缩后的文件删除掉,不用多余保存。 -
gulp-rev 把静态文件名改成
hash
的形式。 -
gulp-rev-replace 配合 gulp-rev 使用,拿到生成的
manifest。json
后替换对应的文件名称。 -
gulp-rev-collector 到线上环境前,我会用来配合gulp-rev使用,替换
HTML
中的路径 -
gulp-rev-append 给页面引用的静态文件增加
hash
后缀,避免被浏览器缓存...当然,如果是使用CDN
,这个套路就不行了 -
gulp-connect / gulp-livereload
LiveReload
的俩款插件都值得拥有,不过都各稍有学习成本,看看文档就明白鸟 -
gulp-sourcemaps 处理
JavaScript
时生成SourceMap
;如果你不了解SourceMap
,可以看看这篇阮一峰大神的《Source Map 详解》 -
gulp-load-plugins 帮忙偷懒用的,可以帮我们加载插件,不用
require
或者import
...当然,俺个人感觉用了这个插件后,阅读gulpfile.js
的可读性差了,鱼和熊掌不可兼得:( -
gulp-jshint
JavaScript
代码校验 -
gulp-sass / gulp-less 写
CSS
的同学都懂哈
进阶插件
必备插件和常用插件都有一个特点,就是下载数都不小。虽然有少部分插件下载数相对不多,但同样值得拥有或了解
-
babel
JS
语法新特性用起来。这个插件可以让我们用新的 标准/特性/提案 写JavaScript
代码,然后再向下 转换编译,最终生成随处可用的JavaScript
代码。更通俗的说话就是:可以用新的规范写代码,经过babel
编译后生成没有兼容问题的代码。 - gulp-flatten 移动指定文件,不想压缩或者合并的时候,直接用这个插件把对应文件移动到指定文件夹。俺偶尔在内部项目会偷懒用上,图方便:)
-
gulp-coffee
CoffeeScript
值得去了解 -
gulp-markdown-pdf 把
Markdown
编译为PDF
-
gulp-markdown 写手的福音,可以把
Markdown
转成HTML
-
gulp-html2md 把
HTML
编译为Markdown
-
gulp-tinypng 超屌的图片压缩工具,使用
Tinypng
引擎。PS:因为Tinypng
免费帐号有月限制,所以使用使需注意。 - sprity 生成雪碧图。稍有点学习成本,仔细阅读文档即可。
-
gulp-if 可以在
pipe
里面写点逻辑了,屌不屌。举例:比如处理./pub/*.js
,如果文件名称是xxx.js
,那么不处理;更可以用来区分当前是开发环境还是生产环境。 -
gulp-file-include 俺搞内部项目的时候会用到,让
HTML
组件化的第一小步 -
gulp-git 直接在
Build
时把代码都提交到git
上了...特么劳资懒起来连我自己都害怕 - gulp-qiniu 用于把指定文件上传至七牛的指定路径下(PS:首先,你得有自己的七牛账号和空间)
-
gulp-notify 在控制台中加入文字描述,
build
的时候更高级有木有。当然,当需要的时候把错误信息也展示出来会很有帮助。更高级的功能就需要你查看其文档了~ -
gulp-plumber
gulp
的错误处理有点坑,假如发生错误进程就挂了。相对的解决办法不少,但是这个是我个人比较推荐的,比特么在容易出错的地方写错误监听靠谱。所以这个插件可以阻止gulp
插件发生错误导致进程退出并输出错误日志。
聊聊 gulpfile.js
gulp API
真没啥好说的,所以也从没打算花时间介绍,那这一节劳资要说说啥呢...干货!
已经枯燥的balabala一通插件,所以偶用自己的方式聊聊这个 gulpfile.js
。PS:默认读者了解,所以不堆代码了哈
一个较简单的前端项目,gulpfile.js
可以轻松上百行,稍复杂点儿的此文件会更大,肯定会不方便阅读和维护。
下面这套目录结构,是适合较复杂前端项目的 gulpfile.js
套路,仅供参考:
{% highlight Delphi linenos %}
gulpfile.js
gulp-conf/
├── env.js // 环境相关
├── global.js
└── qiniu.js // CDN
gulp-tasks/
├── xxx.js
├── xxxx.js
├── ...
├── image.js
├── log.js
├── release.js
└── watch.js
{% endhighlight %}
- 第一行中的
gulpfile.js
也可换成gulpfile.babel.js
。如果想看gulpfile.babel.js
的示例可以去 https://github.com/google/web-starter-kit/blob/master/gulpfile.babel.js -
gulp-conf
路径、公共参数等等,把有必要都变成配置文件,代码优雅多了。当然,如果没有必要就别麻烦了,视情况来 -
gulp-tasks
内的各个文件都是些分类型的子任务,这样一拆分gulpfile.js
必定清爽很多,关键是之后维护各种task
也简单很多
不贴代码的原因是因为我只想提供个 文件夹套路,其实怎么用着爽、怎么分类、甚至怎么取名这些都见仁见智,反正目的是让代码组织的够清晰、好维护,那么偶们的目标就达到鸟
套路
这节会基于这些插件的相互配合和清晰的
gulp
目录结构,让偶们的前端项目快速且高大上的build
起来!
偶这粗暴的把套路分成三类:一种是相对简单点的;一种是稍稍复杂点的;一种是“玩”的比较复杂的。区分的原则是这仨套路的目标会有稍许不同,而且项目需求也不同。搞清楚我们(项目)到底想要得到什么,那么剩下的就是去实现它了!
附加组合 这类在这篇就不说了,比如
gulp+webpack
这种CP
,针对React
项目可以面面俱到。。。这如果要分析起来,比特么gulp
复杂多了去了。
如果你问我,有木有最简单的套路,答曰:有!
如果你问我,最简单的方法是神马,答曰:不要用这些 build
工具...
哇哈哈哈哈哈哈~
简单套路
项目/人群 目标:要求较高的个人项目、公司内部项目、小商业项目
主要需求:
-
HTML
也得组件化(这词我有点反感,真听得烂大街了)
。该common
的拎出来;该widget
的拎出来 - 图片压缩、合并
-
JS/CSS/HTML
压缩、合并 -
sass/less
必须得用起来,要不CSS
怎么显得高大上 - 额...差不多够了吧,毕竟我们只是入门的简体套路,再复杂点儿
gulpfile.js
的体积就不小了:)
一般套路
项目/人群 目标:喜爱尝试的个人项目、一般商业项目、要求较高的开源项目
主要需求:
- 简单套路里面的都包括
-
JavaScript
部分用ES6
来编写... PS:技术红利不用白不用嘛 -
JavaScript
代码校验用起来 -
CSS
方面根据设置项目所需的浏览器版本,从而自动处理浏览器前缀 - 所有静态文件全部上
CDN
- 把
task
进行拆分,使其更好维护
复杂套路
项目/人群 目标:商业项目、代码洁癖者...额,再加一箱:程序员中的单身狗:)
主要需求:
- 一般套路里面的都包括
- 增加对
gulp
进程出错的优雅处理 - 更多
task
信息的相关展示 - 在
task
中有逻辑处理,比如执行某task
会判断是否是开发环境,然后可以有相应的处理 - 自动清理掉那些不需要的
tmp
文件(临时文件),只留下真正有用的代码 - LiveReload
- 代码自动同步
git
- 劳资实在编不下去了...
结语
你的插件应该只做一件事,并且做好
写插件原本是我想好好写的地方,发现中文文档已经非常丰富了,那就不费那个劲了,直接贴官方地址:http://www.gulpjs.com.cn/docs/writing-a-plugin/
最后聊聊我眼中的 gulp
:
-
gulp
目前有相关插件2266个 -
gulp
是基于Node
的,95%的代码都是JavaScript
,5%的代码是Shell
,npmjs.com显示上个月的下载超过210W,当前(2016/04/30)release 的版本是3.9.1 - 神马?安装各种插件还是用
npm
?赶紧 cnpm 用起来,安装速度噌噌的 -
gulp
VSgrunt
这话题已经被说烂,但我还是想说说。个人觉得玩grunt
是种写配置的感觉;玩gulp
就是写脚本(task),且gulp
更容易上手、更高效。 推荐读者看看这篇文章Gulp vs Grunt,写的着实深入浅出 - 编译
CoffeeScript
- 编译
less / sass
- 把
HTML
编译为Markdown
- 把
Markdown
编译为HTML/pdf
- 把
Excel
编译为HTML/JSON
- 开发
React
项目时和好基友webpack
配合,酸爽到爆,推荐同事的一篇文章,我司目前的React
项目基本就是这个套路:《基于gulp和webpack的前端工程化》 - ...
最近在InfoQ上有读到一个系列的文章,是讨论
gulp
和npm script
优劣,地址 - 《我为何放弃Gulp与Grunt,转投npm scripts》。篇幅有限,下周末的文章我再拿出来讨论,不过推荐大家阅读,还是值得我们思考的。
相关推荐
总结来说,`gulp`通过定义任务和插件的组合,能有效地帮助开发者自动添加时间戳和压缩资源,从而优化前端项目的构建流程,提高工作效率。这种自动化处理方式在现代Web开发中是不可或缺的一部分,尤其在大型项目中,...
总结,学习和掌握gulp,能够帮助开发者提高工作效率,简化前端项目的构建过程。通过安装和配置,以及编写`gulpfile.js`,你可以根据项目需求定制各种自动化任务,从而更加专注于代码编写本身,而非繁琐的构建步骤。
除了基本任务,还可以定义更复杂的流程,比如使用`gulp-clean-css`和`gulp-uglify`压缩CSS和JavaScript。安装插件: ```bash npm install --save-dev gulp-clean-css gulp-uglify ``` 然后更新`gulpfile.js`: ``...
总结来说,"nodejs_gulp_cli" 主题涵盖了使用 Node.js 环境,通过 Gulp CLI 创建和管理前端开发工程的方法。这包括理解 Gulp 的核心概念,安装和配置 Gulp,编写 Gulpfile.js 以定义任务,以及使用 Gulp 插件处理...
- **简化配置**:Gulp 使用 JavaScript 文件作为配置文件,更加直观且易于理解。 - **提高构建效率**:通过数据流处理,减少了磁盘 IO 操作,提高了构建速度。 - **流畅的插件串联**:Gulp 的数据流设计允许插件之间...
总结,`gulp`是一个强大的静态资源管理和构建工具,通过编写简单任务脚本,可实现代码编译、压缩、合并、发布等一系列自动化流程。`gulp-package-hugin-demo-master`项目就是一个很好的学习案例,通过阅读和实践,你...
通过上述介绍,我们了解了 Git 的基本用法以及如何使用 Gulp 进行前端自动化构建。Git 是现代软件开发不可或缺的版本控制工具,而 Gulp 则能够帮助前端开发者提高工作效率,减少重复劳动。掌握这两项技能对于任何...
总结来说,`gulp`通过提供灵活的任务管理和强大的插件生态系统,帮助前端开发者构建高效、可维护的项目流程。理解并熟练使用`gulp`,可以极大地提升你的前端开发效率。通过阅读`gulpManage-master`这个项目,你可以...
Gulp.js是一款基于Node.js的自动化构建工具,它使用流式处理模型,允许开发者通过定义一系列的任务来构建项目。Gulp.js的插件系统非常丰富,可以处理各种任务,如CSS预处理器、JavaScript压缩、图片优化等。通过编写...
在这个`gulp 前端开发demo`中,我们将深入理解`gulp`的核心概念和使用方法。 ### 一、gulpfile.js `gulpfile.js`是`gulp`项目的配置文件,其中包含了所有构建任务的定义。通过编写JavaScript代码,我们可以自定义...
总结,`gulp`项目配置文件涉及到了项目构建的各个方面,包括任务定义、流处理、环境配置、打包发布等。熟练掌握`gulp`能显著提高开发效率,使项目构建过程更加规范和自动化。通过合理的配置,我们可以实现高效、灵活...
总结来说,`gulp` 和 `requireJS` 的结合使用,能够帮助我们构建一个模块化、易于管理和自动化构建的前端项目。通过 `gulp` 实现文件的处理和打包,通过 `requireJS` 管理模块依赖,两者协同工作,大大提高前端开发...
本篇文章将深入探讨`gulp插件文件`的相关知识点,帮助开发者更好地理解和使用Gulp进行项目构建。 ### Gulp简介 Gulp是一个基于任务的构建系统,它的核心思想是通过定义一系列的任务来完成特定的工作。开发者可以...
本文将详细介绍gulp的安装使用、构建任务定义、常用插件介绍以及如何通过gulpfile.js来开始构建项目。 ### Gulp简介 gulp是一种基于Node.js的前端构建工具,它以流(stream)的方式处理文件,避免了磁盘I/O操作,...
总结来说,Gulp JDists是前端开发中的一个重要工具,它简化了代码块的管理和构建过程,提升了开发效率。通过学习和熟练使用,开发者可以更好地组织和优化前端代码,使得大型项目的维护变得更加轻松。
了解如何配置和使用 `gulp-svgmin`,结合最佳实践,能够有效降低SVG资源的大小,提高网页加载速度,提升用户体验。在实际开发中,应根据项目需求灵活运用这些工具和技巧,确保资源优化效果最大化。
总结来说,"gulp-cache" 是一个优秀的 Gulp 插件,它为前端开发者提供了一种有效利用缓存机制的方法,以减少不必要的重复任务,加速构建流程。通过理解其工作原理和正确地将其集成到项目中,我们可以让开发工作更加...
标题“前端开源库-gulp-foreach”提及的核心技术是`gulp-foreach`,这是一个在前端开发中广泛使用的工具,特别是在基于`Gulp.js`的自动化构建流程中。`Gulp`是一个流行的JavaScript任务运行器,它利用Node.js的流...
总结来说,`gulp-envify` 是一个强大的工具,它让前端开发者能够在 `gulp` 构建流程中方便地处理环境变量,无需依赖 `browserify`。这对于那些希望独立于 `browserify` 而使用环境变量管理的项目来说,无疑是一个...