JGulp: 利用Gulp 配置的前端项目自动化工作流
商业竞争时代的Web 开发,效率越来越成为其中决胜的关键因素之一。在前几年的时候,前端是一片荒芜的待开垦之地,开发者更多考虑开阔更多技术疆域;而最近几年,在前端技术这种更新迭代快到连裸奔都追不上的情况下,在强调高产的同时,效率必然是成为争夺的制高点。
引子
在苦苦构思了上面的开头后,从“效率”这个词Jeff 引出了今天话题——也就是标题说的前端项目自动化工作流。也许你还不全懂诸如“前端自动化”“工作流(workflow)”这些名词,不急且让我列举下面的场景:
在刚刚过去的时代(恩对于很多人来说是他们正在经历的时代),小J 同学是这样开发静态网页的:接到项目,新建命名一个项目文件夹,依次新建images、css、js等文件夹分别放对应的静态文件,新建index.html 开始码HTML+CSS+JS 代码,改动一下按一下F5(或CTRL+R)刷新浏览器。项目大体快完成了,去tinypng 压缩图片,去某个在线压缩网站压缩合并CSS/JS文件,最后检查一番整理文件打包供后续开发。后来有了Github 做版本控制,后来用了Compass 写Sass 貌似快了些。不过不过,依然在完成一次项目后累成狗的同时祈祷键盘F5键没有坏掉。
前进
不得不说老外无论在哪个领域都领先我们几步,前端亦是如此。在早早就经过了那个年代后,老外发明(或者说整合)了一种前端自动化的方式,借助Node 这个新时代框架构建了一套工作流工具,目的是将上面说的压缩合并、新建、刷新等重复性工作让“机器”自动完成——工程师嘛就去干该干的事情,专注编码。
那么到现在,这类工具有什么?据我浅陋的网络认知,Grunt 很流行,据说很著名的前端工具Yeoman 包含了这个Grunt 。于是在某个风平浪静的下午,我去入门Grunt,但是看到那复杂的配置我就怂了——晕追求效率的工具也不用弄那么复杂吧,作为工具本身应该是简单+其作用并举的吧?然后偶然看到一篇《Gulp的目标是取代Grunt》的檄文,看完后俺义无反顾投入了Gulp 的怀抱。在花了一个小时多了解了Gulp 并看明白配置的写法后,那个风平浪静的下午,我久久不能抑制住内心的激动。借着这激动的情绪以及对旧时代经历的种种愤懑,我捣鼓了出了属于我的Gulp——JGulp。虽然是造轮子,但依然相见恨晚。
JGulp
JGulp 是本人利用Gulp 配置的适合自己的一个前端项目自动化工作流,目前正在实践运用中(通俗说用得还挺爽)。如果你有需要,可以参考本工作量构建适合自己的工作流。
Github地址在这,跪求Star,欢迎Fork!
2015.04.08 更新:以下内容已多有改变,请以Github 上的Readme 为主。
JGulp 包含的功能模块(插件)
小标题含义:功能(对应的Gulp 插件)
Compass(gulp-compass)
一个Sass 框架,本工作量主要是Compass + Sass,因此熟悉这两者是使用本工作流的基础条件。
Sass(gulp-sass)
Sass 是与 Less 并举的 CSS 预处理器,一种全新的CSS 编码方式。
本地Web 服务器功能(gulp-webserver + tiny-lr)
能够让你的当前项目目录映射到Localhost 上,本功能主要是为了添加自动刷新(livereload)功能而添加。
网页自动刷新功能(gulp-livereload)
这个功能毫无疑问是最实用的,借助本livereload 模块,一旦监控到有文件改动就自动刷新页面。需要安装相应的Chrome 扩展配合使用。
JS 文件合并(gulp-concat)
JS 文件压缩(gulp-uglify)
图片无损压缩(gulp-imagemin + imagemin-pngquant)
经过实际使用发现,图片压缩略有损失,但基本无碍。
文件清理功能(gulp-clean)
在项目完成可以删除一些多余的文件
任务错误中断自动重传(gulp-plumber)
好吧,“任务错误中断自动重传”是我瞎命名的。默认的 Gulp 任务在执行过程中如果出错会报错并立即停止当前工作流(如在 watch Sass编译时候恰巧 Sass代码写错了)。使用plumber 模块可以在纠正错误后继续执行任务。
自动打包并按时间重命名(gulp-zip)
一般项目完成后需要整理文件并压缩以供交付使用或进行下一阶段的开发,本模块可以实现将项目文件自动打包并按时间重命名。
其他(gulp-copy、gulp-rename、opn)
其他杂项模块为该Gulp 添加文件复制、文件重命名、浏览器自动打开项目目录等基础功能
注: 1.因为CSS 代码主要是通过Compass 框架完成,所以本工作流不涉及CSS 压缩等其他功能模块(因为这些功能Compass 本身已经包含)。 2.后续多次用于实战项目后可能会有增减,即不断完善之以让个人前端工作效率最大化。
使用方法
1、请先确保已经安装Gulp(需要 Node.js 环境) ,建议采用下面的代码全局安装
$ npm install --global gulp |
---|
2、进入你的项目文件夹下clone 本 git 项目
$ git clone https://github.com/Jeff2Ma/JGulp.git |
---|
3、按照个人的项目需求,重命名JGulp 文件夹为你自己的项目英文名称,填写Project.md文件(Project.md文件在项目最终打包的时候会自动重命名为README.md保存在build 文件夹),填写package.json 文件的项目名称部分。如果需要进一步的个性化,可以编辑gulpfile.js 文件。
4、然后捏,就基本上可以的了,默认任务:
$ gulp |
---|
5、如果项目已经完成,可以通过build 命令进行项目相关文件收集,项目文件最终会汇集到项目目录下的build 文件夹中方面进一步操作
$ gulp build |
---|
6、打包build 文件夹下的项目文件,会自动生成build-xxxx.zip 的文件(xxxx 为打包时候的时间)供交付使用或进行下一阶段的开发
$ gulp zip |
---|
后记
花了些时间写了这篇文章,好的东西就是值得花点时间让其他人知道——虽然JGulp 属于重复造的轮子。当然,本人的认知非常有限,不敢保证上面的东西有没有错误(特别是讲到历史故事那部分),如果有错误欢迎雅正!还有就是,工具对于每个人的适用程度都是不同的,但我觉得JGulp 挺适合个人跟学生小团队(2~4 人)使用,特别是学了前端有一阵子的尚无大型商业团队项目的学生开发者。最后最后,如果正在看本文的你有兴趣,不妨去Github 页面收藏之,跪求Star,欢迎Fork!,要去找实习了,没有牛逼的技术,没有高大上的项目,Github 主页也想好看些啊!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7安装Zookeeper
- CentOS7卸载OpenJDK,然后安装Oracle JDK
- Java停止线程的四种方法
- Educational Codeforces Round 95 (Rated for Div. 2) A-D
- Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
- PHP的另一个高效缓存扩展:Yac
- 在PHP中操作临时文件
- 在线IDE开发入门之从零实现一个在线代码编辑器
- 树莓派4裸机基础教程:从hello world开始
- 基于f2从零实现移动端可视化编辑器
- GORM V2 读操作
- Kubernetes 1.19.0——Pod(1)
- GORM V2 写操作
- Selenium自动化最佳实践技巧(下)
- Selenium自动化最佳实践技巧(中)