<什么是gulp>官网地址:http://gulpjs.com/

  gulp是可以自动化执行任务的工具,在开发流程里,一定有一些动作需要手工的重复的去执行,例如:

  ·把一个文件拷贝到另外一个位置

  ·把多个js或者css文件合并成一个文件,以减少网络请求数,同时可以进行压缩,去掉空格回车等浏览器不需要的部分

  ·把sass或者less文件编译为css

  ·压缩图像文件,以减少网络流量

  ·创建一个可以实时刷新页面内容的本地服务器等等

一般需要重复执行的动作,都可以创建成一个gulp任务,然后在指定的条件下,比如文件发生变化后,自动去执行这些任务

<gulp的特点>

  ·易于使用 通过代码优于配置的策略,gulp让简单的任务简单,复杂的任务可管理

  ·快速构建 利用nodejs流的威力,可以快速的构建项目并减少频繁的IO操作,前一级的输出,直接变成后一级的输入,使得在操作上非常简单

  ·高质量的插件 gulp严格的插件指南确保插件可以简洁的工作

  ·易于学习 API很少(核心方法也就4个)

对比grunt与gulp,用一辆载有货物的火车说明:grunt就好比每次在中转站,都要将车上的货物卸下来,再换量新的火车(有较多的临时文件等);而gulp就好比在中转站的时候,只需要更换新的车头就可以,不需要重新的卸货装货的步骤。

<gulp中的流>

  ·gulp是通过流和代码优于配置的策略(grunt只基于配置的,不好管理)来尽量简化任务编写的工作

  ·类似jQuery里的链式操作,把各个方法串联起来构建完整的任务

  ·用gulp编写任务也可看作是用nodejs编写任务

  ·当使用流时,gulp不需要生成大量的中间文件,只将最后的结果写入磁盘,整个过程因此变得非常快

<gulp的安装>

要想在项目中使用gulp,需要两点:

  ·在全局范围内去安装一下gulp的命令行工具

  ·然后在项目里面再本地安装gulp

<gulp命令行工具>

  ·使用npm install -g在全局范围内安装

  ·一般用npm安装的时候用-g的参数,就表示这个安装的东西会作为命令去执行

  ·若是在mac或者linux下遇到了权限问题,需要在命令前面加上sudo,即sudo npm install gulp -g

安装完成后输入 gulp --help,如果输出一些帮助的信息就表示gulp命令行安装成功了。如果安装不成功,可以试试换成国内的源:

淘宝源:npm install -g gulp --registry=http://registry.npm.taobao.org

中国源:npm install -g gulp --registry=http://registry.cnpmjs.org

官方源:npm instal -g gulp --registry=http://www.npmjs.org/

<项目下安装gulp>

npm install gulp --save-dev

将gulp作为项目的开发依赖(只在开发时用,不会发布到线上)。在node_modules下安装本地的gulp库并添加配置到package.json文件的devDependencies中。

<gulp运行>

  ·创建配置文件

  gulp的任务要放到一个叫gulpfile.js的文件里面。先在项目的根目录下面创建一个这样的文件。然后在这个文件的顶部添加如下代码:

var gulp = require("gulp")

通过require把gulp模块引入当前项目并赋值给gulp变量,这样,gulp变量里面就有了gulp的所有方法

  ·创建gulp的任务

  使用gulp的task方法,第一个参数是任务的名称,第二个参数是任务的定义(一个匿名函数)

gulp.task("hello",function(){
console.log("你好,世界");
})
//执行gulp的任务,打开命令行工具,进入到项目所在的目录,然后执行gulp hello
//gulp可以连续执行多个任务 gulp task1 task2....

<gulp命令行>

  ·-v或-version 显示版本号

  ·--gulpfile  手动指定一个gulpfile的路径

  ·--cwd dirpath 指定当前目录,即从哪个工作目录开始查找

  ·-T或--tasks 显示task依赖树。gulp任务之间可以相互依赖

  ·--color

  ·--no-color

  ·--silent 禁止所有的gulp日志

<gulp工作方式>

  gulp.js的使用流程一般是:先通过gulp.src()方法获取到想要处理的文件流,然后把文件流通过pipe方法导入到gulp的插件中。最后把经过插件处理后的流再通过pipe方法导入到gulp。dest()中,gulp.dest()方法则把流中的内容写入到文件中,dest方法的参数是个路径,如果路径不存在,则会创建。

  ·gulp.src() 在gulp中,使用的是nodejs中的stream,首先获取需要的stream,然后通过stream的pipe()方法把流导入到你想要的地方,比如gulp的插件中,经过插件处理后的流又可以继续导入到其他插件中,当然也可以把流写入到文件中,所以gulp是以stream为媒介的。它不需要频繁的生成临时文件,这也是gulp的速度比grunt快的一个原因。gulp.src()是用来获取流的,但这个流里的内容不是原始的文件流,而是一个虚拟文件对象流,这个虚拟文件对象中存储着原始文件的路径、文件名、内容等信息。

//src方法读出的对象流(流不再是buffer格式,而是一个个的对象)的格式
var File = require("vinyl");//虚拟文件对象流模块
var coffeeFile = new File({
cwd:"/",//当前工作路径
base:"/test/",//基准路径
path:"/test/file.coffee",//文件的完整绝对路径
contents:new Buffer("test=123") //文件的内容
  ...
})

  ·gulp.dest() 用来写文件的。给gulp.dest()传入的路径参数,只能用来指定要生成的文件的目录,而不能指定生成文件的文件名,它生成文件的文件名使用的是导入到它的文件流自身的文件名,所以生成的文件名是由导入到它的文件流决定的,及时我们给dest传入一个带有文件名的路径参数,它也会把这个文件名当做是目录名。若是想要改变文件流的文件名,可以参考使用gulp-rename。dest的目标路径是原始路径去掉base路径。

  ·gulp.task() 执行多个任务时怎么控制任务执行的顺序。gulp中执行多个任务,可以通过任务依赖来实现,例如有one、two、three三个任务,那就可以定义一个空的任务,然后把三个任务当做这个空任务的依赖就可以了。

//只要执行default任务,就相当于one,two,three三个任务执行了
gulp.task('default',['one','two','three'])

如果任务之间没有依赖,则任务会按照书写顺序来执行,如果有依赖的话则会先执行依赖的任务,但是如果某个任务所依赖的任务是异步的,gulp并不会等待那个依赖的异步任务执行完成,而是会直接执行后续的任务。

tips:如果想等异步任务中的异步操作执行完成后再执行后续的任务,有三种方法可以实现:

1,在异步操作完成后执行一个回调函数来通知gulp这个异步任务已经完成,这个回调函数就是人物函数的第一个参数

gulp.task('one',function(cb){//cb为人物函数提供的回调,用来通知任务已完成
setTimeout(function(){
cb()//异步操作完成,执行回调
})
})

2,返回一个promise对象

//一个著名的异步处理的库,https://github.com/kriskowal/q
var Q = require("q");
gulp.task('one',function(){
var deferred = Q,defer();//创建一个defer事件延迟对象
setTime(function(){
deferred.resolve('成功');//异步事件完成
},5000)
return deferred.promise;
})
gulp.task("two",["one"],function(){
console.log("two done");
})

  ·gulp.watch() 用来监听文件的变化,当文件发生变化后,我们可以利用它来执行相应的任务,例如文件压缩等。

gulp.task('default',function(){
gulp.watch("app/**/*.js",['one','two','three'])
})
//监控的任务都不会停止
//
//gulp.watch还有另外一种使用方式
gulp.task("js/*.js",function(event){
//每当文件发生变化时,就会调用这个函数,并且传入一个event对象,该对象包含了文件变化的一些信息,type属性是变化的类型(有added,changed,deleted),path属性为发生变化的文件的路径
console.log(event.type)
console.log(event.path)
})

学习自动化工具gulp的更多相关文章

  1. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

  2. 学习安装并配置前端自动化工具Gulp

    Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...

  3. 前端自动化工具 gulp

    最近一个项目才接触这些自动化工具 webpack gulp grunt 等等.. webpack 可以引入模块 和 压缩 gulp 和 grunt 可以压缩 这里只说下gulp  因为项目里只用到gu ...

  4. 前端自动化工具 -- Gulp 使用简介

    gulp是基于流的前端自动化构建工具. 之前也谈到了 grunt的用法,grunt其实就是配置+配置的形式. 而gulp呢,是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用 ...

  5. 【gulp】前端自动化工具---gulp的使用(一)------【巷子】

    什么是gulp?   基于node的自动化构建工具   扩展:开发的时候分为2个节点一个是开发阶段  另一个是部署阶段        开发阶段:源文件不会被压缩            部署阶段:所有文 ...

  6. 前端自动化工具 -- gulp https://angularjs.org/

    gulp是基于流的前端自动化构建工具. gulp是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用. 同样的,也是包括基本用法和各插件的使用. 二.基本用法--插件使用 gu ...

  7. 前端自动化工具gulp入门基础

    gulp是前端开发过程中经常要用到的工具,非常值得花时间去掌握.利用gulp,我们可以使产品流程脚本化,节约大量的时间,有条不紊地进行业务开发.本文简单讲一下入门gulp需要掌握的东西. 安装gulp ...

  8. 安装并配置前端自动化工具-gulp

    由于现在前端自动化已经很有必要了,所以我今天死皮烂脸的找了2位前端大咖帮助我安装和配置gulp,讲真,这一步步弄下来直到安装配置成功,到现在还是迷迷糊糊,不过我还是把这些步骤给记录下来,以防下次不记得 ...

  9. 自动化工具gulp搭建环境(详解)

    src:读取文件和文件夹       dest:生成文件(写文件)       watch:监控文件       task:定制任务         pipe:以流的方式处理文件 bower的安装和使 ...

随机推荐

  1. MySQL的数据类型,MySQL增删改--添加主外键、添加属性、删除主外键、改表名、获取系统当前时间等

    ls /etc/rc.d/init.d/mysql56service mysql56 start ps aux |grep "mysql"|grep "socket=&q ...

  2. Jquery 图片轮播实现原理总结

    Jquery 图片轮播实现原理总结 以前要做图片轮播效果的时候,总是在网上找一段jquery的复制粘贴进去,只索取不奉献,今个就把我对这个的实现原理讲解一下. 首先说下,我在网上找的例子全是用的UL ...

  3. tag标签记录

    看到项目代码中有一个自定义的tag标签,想起以前自己写过的标签,竟然忘记的差不多了,手一痒,自己写个简单的tag标签,回顾一下历史知识 首先建一个servlet工程,然后写个index.jsp,项目跑 ...

  4. Lock与synchronized 的区别

    多次思考过这个问题,都没有形成理论,今天有时间了,我把他总结出来,希望对大家有所帮助 1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候 ...

  5. 创建基本的2D场景(part1)

    通过一个简单的2D游戏案例来学习unity 2D游戏开发,本文分为以下3个部分. · 创建工作层 · 添加静态景物 · 制作2D动画 通过这个案例,我们可以学习到unity2D游戏制作的基本流程,Sp ...

  6. C#中的StringBuilder

    1. 使用StringBuilder的好处 由于string对象是不可更改的,我们每次使用string类的方法时,都会在内存中重新创建一个新的string对象,这时候就要为该对象分配内存空间了.如果在 ...

  7. 部署 instance 到 OVS vlan100 - 每天5分钟玩转 OpenStack(138)

    上一节创建了 OVS vlan network vlan100,今天部署 instance 到该网络.launch 新的 instance “cirros-vm1”,网络选择 vlan100. cir ...

  8. virtualbox 中的linux 共享文件

    首先要安装VirtualBox的增强版功能(VBoxGuestAdditions) 在 设备--->安装增强版功能----->运行,重启电脑. 出现这个问题,看看安装增强功能的时候,有没有 ...

  9. 【CSS学习笔记】背景图片

    直接看代码: background: blue; /*页面背景为蓝色,很简单的代码*/background-image:url(small.jpg); /*页面背景是名字叫small.jpg的图片*/ ...

  10. mysql数据一致性检查及修复

    percona-toolkit-2.2.20-1.noarchmysql 5.6.29-logmaster:192.168.166.129slave:192.168.166.131 一.创建数据库校验 ...