在软件开发中使用自动化构建工具的好处是显而易见的。通过工具自动化运行大量单调乏味、重复性的任务,比如图像压缩、文件合并、代码压缩、单元测试等等,可以为开发者节约大量的时间,使我们能够专注于真正重要的、有意义的工作,比如设计业务逻辑,编写代码等等。

对很多前端开发人员而言,Grunt 无疑是这方面的首选。基本上,如果你会用 JavaScript ,那么在一个名为 Gruntfile.js (或者 Gruntfile)的文件中用 Javascript 语言定义自动化任务是非常简单的过程,同时大量的 第三方插件 例如 JSHint, Sass 以及 Uglify 也使得 Grunt 具有了良好的可扩展性。

大多数情况下,Grunt 一直是前端构建工具的首选。但是最近一个名为 Gulp.js 的新工具正在吸引越来越多的人的关注。相比 Grunt, 它具有可读性更强、更利于理解的配置文件,更简单地配置过程。

接下来我们就一起来看看如何安装 Gulp, 并通过一个简单的案例让你感受一下这个新的构建工具。


安装 Gulp.js

Gulp.js 是基于 Node 的构建工具,类似 Grunt, 要使用它,你的机器上需要装有 Node.js。有关如何安装 Node, 这里就不再赘述,可以参考官网的指导。如果你之前完全不了解 Node.js, 可以参考一下 Nettuts+ 上面的系列教程。 有了 Node.js, 安装 Gulp.js 就非常容易了,只需要通过 npm (Node 包管理工具) 来安装即可。在命令行模式下执行:

npm install -g gulp

这样就可以将 gulp 以全局方式安装到你的电脑上,以后可以随时通过命令行的 gulp 命令来调用。


在前端项目中配置 Gulp.js

要在你的项目中使用 Gulp, 有几个关键的步骤需要完成:

  • 安装两个依赖包
  • 安装你需要的任意插件
  • 创建 gulpfile.js 文件,在其中定义你要运行的任务

这些步骤需要在你的项目根目录下完成。

首先,要安装依赖项:

npm install --save-dev gulp gulp-util

接下来,安装我们需要使用到的 Gulp 插件,这些插件同样也都是 Node 模块,我们同样使用 npm 命令来安装它们:

npm install --save-dev gulp-uglify gulp-concat

在上面的例子中,安装了两个插件 gulp-uglifygulp-concat, 通过它们可以对 Javascript 文件进行合并和压缩。

注意这里使用了 --save-dev 参数来安装 Gulp 依赖和插件,加上这个参数以后,在安装这些包的同时,也会把它们添加到我们的包配置文件 package.json:

{
"devDependencies": {
"gulp": "^3.6.2",
"gulp-concat": "^2.2.0",
"gulp-uglify": "^0.2.1",
"gulp-util": "^2.2.14"
}
}

这样可以确保项目所需的依赖包可以便捷地通过 npm 来进行安装。 如果你的项目没有 package.json 文件,可以在命令行通过 npm init 来创建, 也可以通过文本编辑器创建。这是 npm 相关的知识,这里就不细说了。

在前面的例子中,只安装了两个插件,Gulp 提供了超过 200 个插件, 涵盖了前端开发流程中的很多工作,包括但不限于:

还有很多,可以到 Gult plugins 进行搜索。


Gulpfile.js 文件

与 Grunt 一样, Gulp 也有一个同名配置文件,叫做 gulpfile.js, 在这个文件里定义需要用到什么插件,执行什么任务,如何执行等等。 这个文件应该存放在你的项目根目录下。

到目前为止,一切看起来都和 Grunt 没什么区别,那么为什么要介绍 Gulp 呢?接下来就是它的优势所在了。 gulpfile.js 的语法非常简单直接,具有非常好的可读性,便于理解。看一下例子:

var gulp=require('gulp'),
gutil=require('gulp-util'),
uglify=require('gulp-uglify'),
concat=require('gulp-concat');

这就是一条非常简单的 Javascript 变量定义语句,它告诉 Gulp 我们需要哪些插件来完成下面的任务定义。

接下来,我们要定义需要 Gulp 去运行的任务。在这个例子中,需要 Gulp 去完成两件事:

  • 压缩 Javascript 文件
  • 合并 Javascript 文件

在 Gulp 中,定义任务非常直接,就是调用 Javascript 的方法。我们通过 Gulp 提供的 task() 方法来定义任务:

gulp.task('js', function() {
gulp.src('./js/*.js')
.pipe(uglify())
.pipe(concat('all.js'))
.pipe(gulp.dest('./js'));
});

看一下上面的代码,gulp.task(name, callback) 方法需要两个参数,第一个是任务名称,第二个是回调函数。这个一看就明白了,没什么要解释的。看一下回调函数里面的代码:

gulp.src('./js/*.js')

src() 方法用来指定要处理的 js 文件的位置,它会获取匹配到的所有 js 文件的路径,并将它们转换为可以传递给插件进行处理的“流”。这是 Node.js 的 Streams API 的组成部分,也是 Gulp 能够实现如此简洁的 API 语法的原因。

.pipe(uglify())

pipe() 方法获取刚才通过 src() 方法获得并传递过来的“流”,并将其传递给指定的插件。本例中是 uglify 插件。

.pipe(concat('all.js'))

与 uglify 一样,concat 插件通过 pipe() 方法接收经过上一个方法处理之后返回的“流”,并把他们该“流”中的所有 Javascript 文件合并为一个名为 "all.js" 的文件。

.pipe(gulp.dest('./js'));

最后,通过 Gulp 的 dest() 方法, "all.js" 被写入到我们指定的目录。整个过程非常直观,易于理解。可以想象一下 jQuery 的链式调用,也可以想象一下 *nix 系统下的 grep, awk 这些命令。

我们要做的最后一件事,是指定 Gulp 的默认任务,让它执行我们刚才定义的 "js" 任务。

gulp.task('default', ['js']);

完整的 gulpfile.js:

// 定义依赖项和插件
var gulp=require('gulp'),
gutil=require('gulp-util'),
uglify=require('gulp-uglify'),
concat=require('gulp-concat'); // 定义名为 "js" 的任务
gulp.task('js', function(){
gulp.src('./js/*.js')
.pipe(uglify())
.pipe(concat('all.js'))
.pipe(gulp.dest('./js'));
}); // 定义默认任务
gulp.task('default', ['js']);

回到命令行(项目根目录),输入 gulp, 回车。 Gulp 找到 gulpfile.js 文件,加载依赖的插件,启动默认任务,然后执行我们的 "js" 任务, 你可以看到最终结果

Gulp 还提供了一个名为 watch() 的方法,可以自动检查指定的资源(文件)的变化。这样就可以在文件发生变化时自动执行特定的任务,不必每次修改了文件就要回到命令行手动执行 gulp.

gulp.watch('./js/*.js', ['js']);

这行代码执行时, Gulp 会持续监控 ./js/ 目录下所有的 js 文件,一旦文件发生变化,就会自动重新执行 "js" 任务来合并和压缩文件。当然,这行代码通常也要放到某个任务中去运行。


转到 Gulp.js

在我开始使用 Grunt 之前的几年里,一直是使用 涛哥 开发的 CssGaga 来做前端构建工具。这是当时我们工作标准流程的一部分,它非常强大。

后来从 isux 转岗到 TGideas, 工作流程发生了巨大的变化,同时我在 Windows / Linux / Mac 不同平台下工作的时间也越来越多,于是转向了 Grunt. 与 CssGaga 相比, Grunt 需要自己去寻找需要的插件,在每个项目中进行适当的配置来完成构建工作,但是它跨平台、按需组合功能的特性较好地满足了我的需要。之后又听说过、尝试过一些前端构建工具,但都没有让我放弃 Grunt.

第一次看到 Gulp 的介绍时,就被它的配置语法所吸引。因为对于任何一个接触过 Node.js 的人来说,这语法是在是太舒服了。一看就懂,看一遍就会,不是吗?暂时来说,它的插件数量还没有 Grunt 那么多那么全面,不过日常的前端任务,还是都涵盖了,而且有一些实现得比 Grunt 平台上的更棒。而且它的插件库也不断在增长,尤其是现在有这么多开发者对它有兴趣,相信它会得到快速的发展。

如果你还没有尝试过,不妨尝试一下。

前端构建工具 Gulp.js 上手实例的更多相关文章

  1. “流式”前端构建工具——gulp.js 简介

    Grunt 一直是前端领域构建工具(任务运行器或许更准确一些,因为前端构建只是此类工具的一部分用途)的王者,然而它也不是毫无缺陷的,近期风头正劲的 gulp.js 隐隐有取而代之的态势.那么,究竟是什 ...

  2. (转)前端构建工具gulp入门教程

    前端构建工具gulp入门教程 老婆婆 1.8k 2013年12月30日 发布 推荐 10 推荐 收藏 83 收藏,20k 浏览 本文假设你之前没有用过任何任务脚本(task runner)和命令行工具 ...

  3. (转载)前端构建工具gulp使用

    前端构建工具gulp使用 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中 ...

  4. 前端构建工具gulp

    前端构建工具gulp使用   前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gul ...

  5. 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5

    Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...

  6. 前端构建工具gulp使用

    前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...

  7. 前端构建工具gulp介绍

    2016年3月3日 10:46:08     晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...

  8. 前端读者 | 前端构建工具Gulp

    @羯瑞 整理 前言 前端工具现在层出不穷,网上搜下一大片,就看你怎么去使用了,基于项目看用什么样的构建工具.有的工具提供的功能还是非常强大的. FIS.百度团队的产品.现在百度的多个产品中使用.面向前 ...

  9. 前端构建工具gulp使用 (转)

    http://www.cnblogs.com/starof/p/5194622.html 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 ...

随机推荐

  1. Visual Studio 中的 Office 和 SharePoint 开发

    MSDN Library 开发工具和语言  Visual Studio 中的 Office 和 SharePoint 开发 https://msdn.microsoft.com/zh-cn/libra ...

  2. 【数组】Search for a Range

    题目: Given a sorted array of integers, find the starting and ending position of a given target value. ...

  3. Pycharm 问题:Clear Read-Only Status

    用的是ubuntu系统,一直在普通用户模式下打开Git下建的项目,今天运行神经网络程序时,由于有一个cudnn错误,必须要在sudo模式下才不会报错,所以用sudo试着打开了pycharm,发现是完全 ...

  4. mysql空间扩展 VS PostGIS

    http://www.cnblogs.com/LBSer/p/3629149.html 功能 Mysql spatial extension  PostGIS 空间索引 仅MyISAM支持R树索引,I ...

  5. redis实战笔记(6)-第6章 使用 Redis构建应用程序组件

    本章主要内容   1.构建两个前缀匹配自 动补全程序 2.通过构建分布式锁来提高性能 3.通过开发计数信号量来控制并发 4.构建两个不同用途的任务队列 5.通过消息拉取系统来实现延迟消息传递 6.学习 ...

  6. Visual Studio使用阿里云Code Git服务器的常见问题

    使用Github的服务器太慢,阿里的https://code.aliyun.com的国内服务器还是很快的.但是使用阿里的Git服务器总是有些地方出问题,现记录下常见的问题: 1.如提示源码已在TFS管 ...

  7. mysql/mariadb 数据库配置

    1.  启动mariadb systemctl start mariadb 2. 设置开机启动mariadb systemctl enable mariadb 一.修改用户密码,以root为例 1. ...

  8. Week4——结对练习&团队作业1

    Deadline: 2017-10-14 10:00PM,以博客发表日期为准. 评分基准: 按时交 - 有分(结对代码-10分,结对博客-10分,团队博客-10分),检查的项目包括后文的三个方面 按要 ...

  9. H5开发过程中修复的bug记录

    从2016年8月1日开始真正意义上的修复bug,也是自己开发之路的开端,希望在这里记录自己修bug过程中遇到的问题及解决方法,待能够自己开发需求的时候,计划记录开发新需求过程中遇到的问题,并且记录自己 ...

  10. Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像

    由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...