珠峰培训

gulp实用教程(一)初体验

作者:

2015-11-23 14:59:11

226

什么是gulp

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

  • 把一个文件拷贝到另外一个位置
  • 把多个 JS 或者 CSS 文件合并成一个文件
  • 对JS文件和CSS进行合并压缩
  • 把Sass或者Less文件编译成 CSS
  • 压缩图像文件
  • 创建一个可以实时刷新页面内容的本地服务器等等。

只要你觉得有些动作是要重复去做的,一般你就可以把这些动作创建成一个 Gulp 或者 Grunt 的任务,然后在指定的条件下,比如文件发生变化以后,自动去执行这些任务。

先安装node

gulp是基于Nodejs的自动任务运行器 安装Gulp用的都是node的包管理工具**npm** 所以你需要先在电脑上安装 node,确定在命令行工具的下面可以使用npm这个命令,这样就能去安装Gulp了。 node.js官网 安装好以后,我们可以打开命令行工具,mac 用户可以使用终端工具,windows 用户可以找到 cmd命令行工具。

gulp特点

  • 易于使用 通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理。
  • 快速构建 利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。它借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单
  • 高质量的插件 Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作。
  • 易于学习 通过最少的 API,掌握 Gulp 毫不费力,构建工作尽在掌握:如同一系列流管道。

资源地址

gulp英文官网
gulp中文网
gulp 技巧集
gulp api
Gulp使用指南
Gulp开发教程
利用 Gulp 处理前端工作流程
前端构建工具gulpjs的使用介绍及技巧

流的概念

官方文档解释 Stream 是 nodejs 各种对象实现的抽象接口。比如一个 http server 的请求是一个 stream,stdout 也是一个。Streams 可读、可写,或者兼有的。所有的 stream 对象都是 EventEmitter 的实例。

流是一种有起点和终点的数据传输手段。

  • 上一个的输出,是下一个的输入
  • 上一个的输出,是下一个的输入
  • 上一个的输出,是下一个的输入

gulp中的流

而gulp正是通过流和代码优于配置的策略来尽量简化任务编写的工作。
类似jquery里的链式操作,把各个方法串连起来构建完整的任务。
用gulp编写任务也可看作是用Node.js编写任务。
当使用流时,gulp不需要生成大量的中间文件,只将最后的输出写入磁盘,整个过程因此变得非常快。

安装 Gulp

在项目里使用 Gulp 你得先在全局范围内去安装一下 Gulp 的命令行工具 然后在项目里面再去安装 Gulp。

Gulp 命令行工具

  • 使用 npm install 去安装 gulp,注意加上一个 -g 的参数,表示在全局范围内去安装.
  • 一般用 npm 安装的时候用一个 -g 的参数就表示,这个安装的东西会作为命令去执行。
  • 如果你在mac或linux下遇到了权限问题,在下面这个命令的前面加上 sudo npm install gulp -g 并输入mac密码。

npm install -g gulp

安装完成后可以输入 gulp --help

如果输出一些帮助的信息就表示可以gulp命令行成功安装了

如果安装不上可以换一下源试试

  • 淘宝源 npm install -g gulp --registry=http://registry.npm.taobao.org
  • 中国源 npm install -g gulp --registry=http://registry.cnpmjs.org
  • 官方源 npm install -g gulp --registry=http://www.npmjs.org/

资源地址

npm代理设置

官方安装说明

1. 先给创建的前端的项目创建一个目录

maclinux 操作系统下执行

mkdir learngulp

windows 操作系统下执行

md learngulp

2. 使用 cd 命令进入此目录

cd learngulp

3. 创建项目描述文件 package.json

npm,需要一个叫 package.json 的文件来管理依赖,可以手工去创建这个文件,也可以使用 npm init 这个命令。 输入

npm init

输入一些问题答案

name: (zhufeng_automation) learngulp //项目名字,npm init会自动取当前目录名作为默认名字,这里不需要改,直接确认即可
version: (1.0.0) 1.0.0   //项目版本号,这个大家按自己习惯来定就可以
description: learn gulp //项目说明
entry point: (index.js) index.js // 入门文件 npm start 会执行此文件
test command: test.js //测试脚本 npm test 会执行此文件
git repository: (https://github/zhufengpeixun/zhufeng_automation.git) //模块的git仓库,选填。npm的用户一般都使用github做为自己的git仓库
keywords: node.js gulp  //在npmjs官网搜索时的关键字
author: zhangrenyang //项目作者名字
license: (ISC) MIT //授权协议
About to write to D:\mygit\zhufeng_automation\package.json:

{
  "name": "learngulp",
  "version": "1.0.0",
  "description": "learn gulp",
  "main": "index.js",
  "dependencies": {
    "gulp": "^3.9.0"
  },
  "devDependencies": {},
  "scripts": {
    "test": "test.js"
  },
  "repository": {
    "type": "git",
    "url": "https://git.coding.net/zhufengpeixun/zhufeng_automation.git"
  },
  "keywords": [
    "node.js",
    "gulp"
  ],
  "author": "zhangrenyang",
  "license": "MIT"
}


Is this ok? (yes) yes //对以上内容确认无误后,就可以直接回车确认了

回车后会在当前目录下创建一个 package.json 文件

这样可以把 gulp 作为项目的开发依赖(只在开发时用,不会发布到线上),通过

npm install gulp --save-dev

在node_modules下安装本地的gulp库并把添加配置到 package.json 文件里面。

"devDependencies": {
    "gulp": "^3.9.0"
  }

现在,我们可以删除掉 node_modules 这个目录 mac 下可以用 rm -rf node_modules windows 下可以的资源管理器里删除 node_modules 然后用一行命令npm install,可以安装所有的,在 package.json 文件里面列出来的依赖的模块。

1.创建配置文件:

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

$ var gulp = require('gulp');

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

2.创建 gulp 的任务

可以使用 gulp 的 task 方法
同样我们去创建一个叫 hello 的任务,它要做的事就是在控制台上输出 "您好" 这两个字
第一个参数是任务的名称,第二个参数是任务的定义,是一个匿名函数

gulp.task('hello', function () {
  console.log('您好');
});

执行 Gulp 的任务,打开命令行工具,进入到项目所在的目录,然后输入:

gulp hello

会返回:

$ gulp hello
[21:36:34] Using gulpfile D:\mygit\zhufeng_automation\gulpfile.js
[21:36:34] Starting 'hello'...
您好
[21:36:34] Finished 'hello' after 959 μs

gulp后面跟着的是任务的名称,不输入任务名称的话会默认找default任务,找不到会报错

执行其它任务

可以使用

gulp <task> <othertask>

gulp 只有你需要熟知的参数标记,其他所有的参数标记只在一些任务需要的时候使用。

  • -v 或 --version 会显示全局和项目本地所安装的 gulp 版本号
  • --require 将会在执行之前 reqiure 一个模块。这对于一些语言编译器或者需要其他应用的情况来说来说很有用。你可以使用多个--require
  • --gulpfile 手动指定一个 gulpfile 的路径,这在你有很多个 gulpfile 的时候很有用。这也会将 CWD 设置到该 gulpfile 所在目录
  • --cwd dirpath 手动指定 CWD。定义 gulpfile 查找的位置,此外,所有的相应的依赖(require)会从这里开始计算相对路径
  • -T 或 --tasks 会显示所指定 gulpfile 的 task 依赖树
  • --tasks-simple 会以纯文本的方式显示所载入的 gulpfile 中的 task 列表
  • --color 强制 gulp 和 gulp 插件显示颜色,即便没有颜色支持
  • --no-color 强制不显示颜色,即便检测到有颜色支持
  • --silent 禁止所有的 gulp 日志

命令行会在 process.env.INIT_CW 中记录它是从哪里被运行的。