Gulp- 简介

Automate and enhance your workflow | 用自动化构建工具增强你的工作流程

Gulp 是什么?

gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;

使用它,不仅可以很愉快的编写代码,而且大大提高我们的工作效率。

gulp是基于Nodejs的自动任务运行器,它能自动化地完成 javascript、coffee、sass、less、html/image、css 等文件的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。通过本文,我们将学习如何使用Gulp来改变开发流程,从而使开发更加快速高效。

gulp 和 grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。

Gulp的核心概念?

流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。

而gulp正是通过流和代码优于配置的策略来尽量简化任务编写的工作。这看起来有点“像jQuery”的方法,把动作串起来创建构建任务。早在Unix的初期,流就已经存在了。流在Node.js生态系统中也扮演了重要的角色,类似于*nix将几乎所有设备抽象为文件一样,Node将几乎所有IO操作都抽象成了stream的操作。因此用gulp编写任务也可看作是用Node.js编写任务。当使用流时,gulp去除了中间文件,只将最后的输出写入磁盘,整个过程因此变得更快。

Gulp的特点?

  • 易于使用:

    通过代码优于配置的策略,gulp 让简单的任务简单,复杂的任务可管理。
  • 构建快速:

    利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。
  • 易于学习:

    通过最少的 API,掌握 gulp 毫不费力,构建工作尽在掌握:如同一系列流管道。
  • 插件高质:

    gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作。

Gulp- 环境搭建

gulp 是基于 node 实现的,那么我们就需要先安装 node

Node是一个基于Google V8 JavaScript引擎建立的一个平台,可以利用它实现Web服务,做类似PHP的事。

npm install -g gulp  # 全局安装gulp
gulp -v # 查看gulp是否安装成功 ➜ ~ gulp -v
[20:17:32] CLI version 3.9.1

Gulp- 构建项目

使用Gulp来构建项目:

mkdir Gulp && cd Gulp && npm init -y && npm install gulp --save-dev
#使用npm初始化项目并且安装Gulp模块,能够看到如下的package.json文件中已经包含了Gulp的相关信息。
{
"name": "Gulp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1"
}
}

gulpfile.js文件的使用:

gulp也需要一个文件作为它的主文件,在gulp中这个文件叫做gulpfile.js。

创建gulpfile.js文件,与package.json文件一样放在项目根目录中,之后需要做的就是在gulpfile.js文件中定义任务了。

在gulpfile.js文件中写入以下内容:

    var gulp = require('gulp');
gulp.task('default', function() {
console.log("Gulp OK!");
});

完成之后在Terminal中运行gulp命令,然后会看到刚才在task任务中要输出的内容.

➜  gulp
[00:35:29] Using gulpfile ~/WebStrom-Work/Gulp/gulpfile.js
[00:35:29] Starting 'default'...
Gulp OK!
[00:35:29] Finished 'default' after 141 μs

Gulp- API

gulp.src()

语法:

gulp.src(globs[, options])

输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件。 将返回一个 Vinyl files 的 stream 它可以被 piped 到别的插件中。

名称 类型 含义
globs String 或 Array 所要读取的 glob 或者包含 globs 的数组。
options Object 通过 glob-stream 所传递给 node-glob 的参数。

gulp.dest()

语法:

gulp.dest(path[, options])

能被 pipe 进来,并且将会写文件。并且重新输出(emits)所有数据,因此你可以将它 pipe 到多个文件夹。如果某文件夹不存在,将会自动创建它。

  • path 类型: String or Function ,文件将被写入的路径(输出目录)。也可以传入一个函数,在函数中返回相应路径,这个函数也可以由 vinyl 文件实例 来提供。

  • options

    类型: Object , 为一个可选的参数对象,通常我们不需要用到

gulp.task()

语法:

 gulp.task(name[, deps], fn)
  • name

    类型: String,任务的名字,如果你需要在命令行中运行你的某些任务,那么,请不要在名字中使用空格。

  • deps

    类型: Array,一个包含任务列表的数组,这些任务会在你当前任务运行之前完成。

gulp.task('mytask', ['array', 'of', 'task', 'names'], function() {
// 做一些事
});

注意: 你的任务是否在这些前置依赖的任务完成之前运行了?请一定要确保你所依赖的任务列表中的任务都使用了正确的异步执行方式:使用一个 callback,或者返回一个 promise 或 stream。

  • fn

    该函数定义任务所要执行的一些操作。通常来说,它会是这种形式:gulp.src().pipe(someplugin())。

gulp.watch()

语法:

gulp.watch(glob[, opts], tasks)

gulp.watch()用来监视文件的变化,当文件发生变化后,我们可以利用它来执行相应的任务。

  • glob类型: String or Array ,一个 glob 字符串,或者一个包含多个 glob 字符串的数组,用来指定具体监控哪些文件的变动。

  • opts 类型: Object

传给 gaze 的参数。

  • cb(event)

    类型: Function ,每次变动需要执行的 callback。

参考:Gulp-API

Gulp- 常用插件

压缩JS -> gulp-uglify:

安装 gulp-uglify:

 npm install gulp-uglify --save-dev

示例代码:

var gulp = require('gulp');
var uglify = require('gulp-uglify'); gulp.task('javascript',function () { // javascript: 任务名称
gulp.src('./src/js/*.js') // src: 定位到需要压缩的js文件目录下
.pipe(uglify()) // 执行压缩文件
.pipe(gulp.dest('./dist/js')); // 输出到指定目录
});

API参考:gulp-uglify

压缩CSS -> gulp-minify-css:

安装 gulp-minify-css

npm install gulp-minify-css --save-dev

示例代码:

var gulp = require('gulp');
var minify = require('gulp-minify-css') gulp.task('css',function () {
gulp.src('./src/css/*.css')
.pipe(minify())
.pipe(gulp.dest('./dist/css'));
});

API参考:gulp-minify-css

压缩图片 -> gulp-imagemin:

安装 gulp-imagemin

npm install gulp-imagemin --save-dev

示例代码:

var gulp = require('gulp');
var image = require('gulp-imagemin'); gulp.task('image',function () {
gulp.src('./src/images/*.*')
.pipe(imagemin())
.pipe(gulp.dest('./dist/images'));
});

API参考:gulp-imagemin

编译Less-> gulp-less:

安装 gulp-less

npm install gulp-less --save-dev

示例代码:

var gulp = require('gulp');
var less = require('gulp-less'); gulp.task('less',function () {
gulp.src('./src/less/*.*')
.pipe(less())
.pipe(gulp.dest('./dist/less'));
});

API参考:gulp-less

自动刷新-> gulp-livereload:

安装gulp-livereload

npm install gulp-livereload --save-dev

示例代码:

在每个gulp.task()方法中的gulp.src()方法后追加   .pipe(livereload());    即可。

需要配合谷歌浏览器插件 LiveReload插件来使用,实现自动刷新。

API参考:gulp-livereload

Google Chrome Plugin:LiveReload

完整gulpfile.js文件:

var gulp = require('gulp'); // Gulp
var uglify = require('gulp-uglify'); // JavaScript
var minify = require('gulp-minify-css'); // CSS
var imagemin = require('gulp-imagemin'); // Images
var less = require('gulp-less'); // Less
var livereload = require('gulp-livereload') // LiveReload // 执行所有任务
gulp.task('default', ['javascript','css','less','image']); gulp.task('javascript',function () { // jsscript: 任务名称
gulp.src('./src/js/*.js') // src: 定位到需要压缩的js文件目录下
.pipe(uglify()) // 执行压缩文件
.pipe(gulp.dest('./dist/js')); // 输出到指定目录
}); gulp.task('css',function () {
gulp.src('./src/css/*.css')
.pipe(minify())
.pipe(gulp.dest('./dist/css'));
}); gulp.task('less',function () {
gulp.src('./src/less/*.*')
.pipe(less())
.pipe(gulp.dest('./dist/css'));
}); gulp.task('image',function () {
gulp.src('./src/images/*.*')
.pipe(imagemin())
.pipe(gulp.dest('./dist/images'));
});

Gulp- 参考资料

常见web项目目录:

在当前项目的根目录下执行tree命令,即可看到项目的整个目录结构,如果没有tree命令,在Mac系统下可以使用brew进行安装:

➜  Glup tree ../Glup
../Glup ├── build # 项目构建脚本
├── src # 源码目录
│   ├── css # CSS文件
│   ├── fonts # 字体文件
│   ├── images # 图片文件
│   ├── js # js脚本文件
│   ├── less # less文件
│   └── sass # sass文件
├── dist # 编译出来的发布版本目录
│   ├── css
│   ├── fonts
│   ├── images
│   └── js
├── docs # 文档
├── test # 测试脚本
├── gulpfile.js # Gulp工具构建项目的主文件
├── node_modules # npm包存放目录
├── package-lock.json #npm5.0以上项目依赖文件
├── package.json # npm包管理配置文件
├── LICENSE # 授权协议
└── README.md # 项目说明文件

Gulp-构建工具 相关内容整理的更多相关文章

  1. Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.cs ...

  2. [翻译]在gulp构建工具中使用PostCSS

    前言 PostCSS已经在一段时间内迅速普及,如果你还不知道PostCSS或还没有使用它,我建议你看一下之前的一篇介绍文章<PostCSS简介>,其中介绍了使用PostCSS的基本方法,包 ...

  3. ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...

  4. gulp构建工具学习汇总

    前端脚手架____gulp配置文件------- https://pan.baidu.com/s/1eSs7COy 1:有了package.json 直接 npm install自动下载相应的npm包 ...

  5. gulp 构建工具

    1. gulp 的简介 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以 ...

  6. gulp构建工具的安装

    第一步:node.js安装 在gulp安装之前,本机需要node环境.访问http://nodejs.org,然后点击大大的绿色的install按钮,下载完成后直接运行程序.npm会随着安装包一起安装 ...

  7. Oracle相关内容整理

    一.常用sql 1.查看版本 SELECT * FROM V$VERSION; SELECT version FROM V$INSTANCE 2.数据库发生死锁时,跟踪文件的位置 关于跟踪文件,大义是 ...

  8. 使用gulp构建工具

    之前一个demo中用的是grunt,照着grunt用到的插件找了下gulp的,总体使用还算顺畅,说实话并不觉得学习成本有降低什么的,差不多.不过也遇到一些问题: 1.gulp.dest()输出目录需要 ...

  9. VS工具相关内容

    1.VS自带的Visual Studio中的<C# 语言规范>安装路径:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC#\Sp ...

随机推荐

  1. C#作业处理

    2019.9.8 作业要求: 将字符串加密,即将字符串中每个字符向后移动五个字符,并输出密文 解决方案: using System; using System.Collections.Generic; ...

  2. SQL学习笔记(三)

    左连接 格式:select * from 表1 left join 表2 on 表1.列=表2.列 例1:查询所有学生的成绩,包括没有成绩的学生. 例2:查询所有学生的成绩,包括没有成绩的学生,需要显 ...

  3. Visual C++2010的使用

    Tools->Settings>Rest... 还原所有设置 运行程序:"D:\Program Files\VCExpress\Install\Microsoft Visual ...

  4. [JDBC]查询结果集把字段名和字段值一起竖向输出

    代码: package com.hy.fieldandvalue; import java.sql.Connection; import java.sql.DriverManager; import ...

  5. 干货满满!10分钟看懂Docker和K8S(转)

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  6. Ajax serialize()提交form表单不能上传file类型

    前台form表单的提交方式有很多种,例如: 1. form表单submit直接提交的方法 2. Ajax提交的方法 3. jquery提交的方法 4. 原生js提交的方法 每一种方法都有它的优势和不足 ...

  7. 利用OpenGL固定流水线绘制球体

    在OS X上的一个OpenGL简单demo.所附赠的代码是绘制半个球体.开启了深度缓存和多重采样,采样数是4. 详细下载地址请见:http://www.cocoachina.com/bbs/read. ...

  8. Python3基础 str __add__ 拼接,原字符串不变

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  9. Oracle中复制表的方法(create as select、insert into select、select into)

    转: Oracle中复制表的方法(create as select.insert into select.select into) 2018-07-30 22:10:37 小白白白又白cdllp 阅读 ...

  10. python对 windows系统监控插件

    在python编程的windows系统监控中,需要监控监控硬件信息需要两个模块:WMI 和 pypiwin32 .