<什么是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. c# datagridview 设置某行不可见解决办法

    [前提]datagridview与数据库绑定,需要单独设置某行或者某个单元格不可见. [问题分析]直接用this.dataGridCiew1.Rows[0].Visible = false;不可行,会 ...

  2. bat编程基本知识

    1 声明变量 ::注意=前后不要留空格.随便说一下,在bat中,连续两个冒号表示注释 set var1=test 如果要引用这个变量的话,可以这样写:%var1% 2 echo off/on echo ...

  3. asp.net做的网站账号登陆后注销不管用了

    最近做了个项目用到了数据库登录,A登陆后把登录状态保,个人信息存在Session里,但是奇怪的是,只要有一个用户登录后在其他电脑上打开上述页面,则也显示A登录状态,注销也不管用了.以前还号的.求大神啊 ...

  4. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

  5. Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交

    今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点 ...

  6. 用ajax对数据进行查看人员信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. DNS解析详细过程

    英文:domain name system. 中文:域名系统. 解析过程: 第一次请求站点(例:http://www.baidu.com),先在当前浏览器路径下寻找有没有缓存对应的解析结果,如果有的话 ...

  8. 使用Unity创建塔防游戏(Part2)

    How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...

  9. ORACLE查询语句

    --建表FAMILYINF CREATE  TABLE  FAMILYINFO(      FNO NUMBER CONSTRAINT FC001 PRIMARY KEY,--把字段fno约束为主键 ...

  10. java基础练习 4

    import java.util.Scanner; public class Forth { public static void main(String[] args){ /*请输入星期几的第一个字 ...