<什么是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. 重复弹Toast的解决方案

    虽然网上有很多了,还是记录一下吧, 解决思路:不用计算Toast的时间之类的,就是定义一个全局的成员变量Toast, 这个Toast不为null的时候才去make,否则直接setText.为了按返回键 ...

  2. springMVC之数据传递

    在前面介绍过从controller中向页面中传数据,可以通过HttpServletRequest进行setAttribute可以将数据放入request中.并且可以在jsp页面使用el表达式获取数据. ...

  3. java mysql 数据类型对照

    java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang. ...

  4. 使用Unity创建塔防游戏(Part1)

    How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...

  5. 个人PE流程备忘

    insmod memdisk     linux16 /boot/memdisk iso raw   initrd16 /iso/Win8PE.iso

  6. Flood it 游戏

    致敬HDU4127做的一个小游戏(数据结构大作业没东西写就搞这个了QAQ). 游戏截图(当然上交版本就没这么暴力拉): GUI界面选用的是Qt,由于之前没有接触过相关的东西,入门Qt花了不少时间. 大 ...

  7. elasticsearch最佳实践

    创建索引 无mapping 创建索引名称为index的索引 curl -XPUT http://localhost:9200/book 有mapping 如果需要定义每个类型的结构映射,创建type名 ...

  8. Python 调用shell

    第一种,os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回.返回值是依赖于系统的,直接返回系统的调用返回 ...

  9. Girl Develop It Chapter Leaders at 2015 Annual Leadership Summit

    Girl Develop It Chapter Leaders at 2015 Annual Leadership Summit Corinne Warnshuis, Executive Direct ...

  10. css技巧总结

    本文旨在记录css中比较特殊的属性的用法,先按项目的时间顺记录,以后再整理. a,input,button,select,textarea{ outline:none; -webkit-tap-hig ...