Gulp与Grunt一样,也是一个自动任务运行器。它充分借鉴了Unix操作系统的管道(pipe)思想,在操作上,它要比Grunt简单。

安装

Gulp需要全局安装,然后再在项目的开发目录中安装为本地模块。先进入项目目录,运行下面的命令。

bashnpm install -g gulp
npm install --save-dev gulp

gulpfile.js

项目根目录中的gulpfile.js,是Gulp的配置文件。它大概是下面的样子。

javascriptvar gulp = require('gulp');
gulp.task('default', function () {
});

举个栗子,我们要实现js的压缩。

javascriptvar gulp = require('gulp'),uglify = require('gulp-uglify');gulp.task('minify', function () {gulp.src('js/app.js').pipe(uglify()).pipe(gulp.dest('app.min'))
});

上面代码中使用了gulp-uglify模块。在此之前,需要先安装这个模块。
记住在安装之前先 运行 npm init 来生成package.json,如果已经有了就不需要这一步了。

bashnpm install --save-dev gulp-uglify

Tips: --save-dev 会将 gulp-uglify 自动添加到package.json的devDependencies中;

gulpfile.js加载gulp和gulp-uglify模块之后,使用gulp模块的task方法指定任务。task方法有两个参数,第一个是任务名,第二个是任务函数。在任务函数中,使用gulp模块的src方法,指定所要处理的文件,然后使用pipe方法,将上一步的输出转为当前的输入,进行链式处理。

在上面代码中,使用两次pipe方法,也就是说做了两种处理。第一种处理是使用gulp-uglify模块,压缩源码;第二种处理是使用gulp模块的dest方法,将上一步的输出写入本地文件,这里是app.min.js(代码中省略了后缀名js)。

从上面的例子中可以看到,gulp充分使用了“管道”思想,就是一个数据流(stream):src方法读入文件产生数据流,dest方法将数据流写入文件,中间是一些中间步骤,每一步都对数据流进行一些处理。

gulp.src()

gulp模块的src方法,用于产生数据流。它的参数表示所要处理的文件,一般有以下几种形式。

  • js/app.js:指定确切的文件名。
  • js/*.js:某个目录所有后缀名为js的文件。
  • js/**/*.js:某个目录及其所有子目录中的所有后缀名为js的文件。
  • !js/app.js:除了js/app.js以外的所有文件。
  • *.+(js|css):匹配项目根目录下,所有后缀名为js或css的文件。

src方法的参数还可以是一个数组,用来指定多个成员。

javascriptgulp.src(['js/**/*.js', 'css/**/*.css'])

gulp.task()

gulp模块的task方法,用于定义具体的任务。它的第一个参数是任务名,第二个参数是任务函数。下面是一个非常简单的任务函数。

javascriptgulp.task('test', function () {console.log('就测试下。');
});

task方法还可以指定按顺序运行的一组任务。

javascriptgulp.task('build', ['css', 'js', 'templates']);

上面代码先指定build任务,它按次序由css、js、templates三个任务所组成。注意,由于每个任务都是异步调用,所以没有办法保证js任务的开始运行的时间,正是css任务运行结束。

如果希望各个任务严格按次序运行,可以把前一个任务写成后一个任务的依赖模块。

javascriptgulp.task('css', ['templates'], function () {// Deal with CSS here
});

上面代码表明,css任务依赖templates任务,所以css一定会在templates运行完成后再运行。

如果一个任务的名字为default,就表明它是“默认任务”,在命令行直接输入gulp命令,就会运行该任务。

javascriptgulp.task('default', function () {// Your default task
});

gulp.watch()

gulp模块的watch方法,用于指定需要监视的文件。一旦这些文件发生变动,就运行指定任务。

javascriptgulp.task('watch', function () {gulp.watch('templates/*.tmpl.html', ['build']);
});

上面代码指定,一旦templates目录中的模板文件发生变化,就运行build任务。

watch方法也可以用回调函数,代替指定的任务。

javascriptgulp.watch('templates/*.html', function (event) {console.log('Event type: ' + event.type); console.log('Event path: ' + event.path);
});

另一种写法是watch方法所监控的文件发生变化时(修改、增加、删除文件),会触发change事件。可以对change事件指定回调函数。

javascriptvar watcher = gulp.watch('templates/*.html', ['build']);watcher.on('change', function (event) {console.log('Event type: ' + event.type);console.log('Event path: ' + event.path);
});

除了change事件,watch方法还可能触发以下事件。

  • end:回调函数运行完毕时触发。
  • error:发生错误时触发。
  • ready:当开始监听文件时触发。
  • nomatch:没有匹配的监听文件时触发。

watcher对象还包含其他一些方法。

  • watcher.end():停止watcher对象,不会再调用任务或回调函数。
  • watcher.files():返回watcher对象监视的文件。
  • watcher.add(glob):增加所要监视的文件,它还可以附件第二个参数,表示回调函数。
  • watcher.remove(filepath):从watcher对象中移走一个监视的文件。

gulp实现自动刷新 - gulp-livereload

gulp-livereload模块用于自动刷新浏览器,反映出源码的最新变化。它除了模块以外,还需要在浏览器中安装插件,用来配合源码变化。

javascriptvar gulp = require('gulp'),livereload = require('gulp-livereload');gulp.task('watch', function () {livereload.listen();gulp.watch(['./asset/**/*.*','./templates/**/*.*'], function (file) {livereload.changed(file.path);});
});

上面代码监视asset和templates下的任何文件,一旦有变化,就自动刷新浏览器。
Tips: 调试css 很方遍,因为刷新css 不需要刷新这个页面,只需要重新加载css即可,赶紧双屏幕,三屏幕搞起来;代码敲得飞起。

还有很多实用的插件 可以到 NpmJs.org 去找。

使用Gulp来加速你的开发相关推荐

  1. TorchFusion 是一个深度学习框架,主要用于 AI 系统加速研究和开发

    TorchFusion 是一个深度学习框架,主要用于 AI 系统加速研究和开发. TorchFusion 基于 PyTorch 并且完全兼容纯 PyTorch 和其他 PyTorch 软件包,它供了一 ...

  2. aws lambda_如何通过在本地模拟AWS Lambda来加速无服务器开发

    aws lambda by John McKim 约翰·麦金(John McKim) 如何通过在本地模拟AWS Lambda来加速无服务器开发 (How you can speed up server ...

  3. 用 Kubernetes 系统加速机器人应用开发

    用 Kubernetes 系统加速机器人应用开发 | Accelerating Robot Application Development with Kubernetes - Chunxu Hu, J ...

  4. EMQX Cloud 影子服务:便捷数据缓存服务,加速 IoT 应用开发

    全托管 MQTT 消息云服务 EMQX Cloud 可以帮助用户轻松将各类物联网设备连接上云,提供与各类第三方服务的数据集成,助力用户进行高效的数据处理.存储与分析. 为了实现更加便捷的物联网数据处理 ...

  5. PHP快还是HTML快,PHP_HTML-加速、再加速,web开发人员是否必须掌握复杂 - phpStudy...

    HTML-加速.再加速 web开发人员是否必须掌握复杂的组件技术才能加快html页面的访问速度?答案是:不一定!实际上,有许多关于HTML与DHTML方面的技巧,它们原理简单而且上手容易.无论是技术高 ...

  6. 加速 SpringBoot 应用开发,官方热部署神器真带劲!

    平时使用SpringBoot开发应用时,修改代码后需要重新启动才能生效.如果你的应用足够大的话,启动可能需要好几分钟.有没有什么办法可以加速启动过程,让我们开发应用代码更高效呢?今天给大家推荐一款Sp ...

  7. 加速Java应用开发速度3——单元/集成测试+CI

    大家可能对如下情景比较熟悉: 如果开发过SSH的web项目,启动服务器可能会比较慢,有的项目甚至需要1分多钟,甚至更多,这个启动时间的等待一般就浪费了: 在开发项目时,有些功能比较复杂,当时觉得思路特 ...

  8. 加速你的开发环境[VS2003]

    自从我们把开发环境从VS6迁移到VS2003后,不得不整日忍受着它缓慢的启动过程,真怀念VS6行云流水般的感觉.其实我们完全可以定制Visual Studio 2003 的初始化过程,去掉那些平日很少 ...

  9. Marvell推出Andromeda Box IoT平台,加速物联网装置开发

    Marvell行销主管Aviad Enav Zagha日前在Semiconductor Engineering撰文指出,随着业者逐渐往云端发展,加上物联网(IoT)装置可满足消费者在智能家庭生活便利性 ...

  10. 使用DeepStream 2.0加速视频分析开发

    翻译自:https://devblogs.nvidia.com/accelerate-video-analytics-deepstream-2/ 智慧城市的规模令人难以置信.全球将部署数十亿的传感器, ...

最新文章

  1. KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机
  2. 基于.NET CORE微服务框架 -谈谈surging API网关
  3. sqlserver 存储过程 C#调用 实现从数据库Get数据
  4. SpringBoot与日志配置
  5. python 加密解密_Python中的加密和解密
  6. 2021年Github项目Top100
  7. 在View页面,使用@if(){ }输出判断正确的内容
  8. UVA434 Matty‘s Blocks【贪心】
  9. Linux-HA实战(1)— Heartbeat安装
  10. springMVC自定义类型转换器(字符串String转日期Date)
  11. Web前端JSP面试题
  12. Linux 系统日常巡检脚本
  13. 面试非重复数字的全排列
  14. 不要签名证书将网页打包封装成苹果APP,无需苹果企业签名,IPA证书签名,ios签名证书,免越狱安装
  15. php时间转换位周月,php日周月统计代码
  16. 基带混用导致信号弱?iPhone网络差的原因及修复,望周知
  17. 60个平移过渡预设PR合集
  18. JavaScript 前端简单工厂模式、工厂方法模式、抽象工厂模式优缺点及详解 — 设计模式《二》
  19. VR硬件演进与其游戏开发中的若干注意事项
  20. 【rk3399】AIO-3399J Linux_SDK Recovery按键无法进入Loader模式

热门文章

  1. win7 下 java 环境变量配置
  2. 学习JavaScript原型应用
  3. 2019牛客多校第二场F Partition problem(暴搜)题解
  4. android AVD 启动时报错
  5. Python学习杂记_1_PyCharm使用的一些收获
  6. Jzoj1307 Jail
  7. accel-pptp 部署
  8. (转)实现AI中LOD优化技术
  9. 编译用户Orcle的package中访问其它Schema的表
  10. MagicAjax的用法, 每10秒刷新, 更改等待loading效果