声明 本教程整理于互联网
# 一、gulp 入门简介
gulp 是基于 node 实现Web 前端自动化开发的工具,利用它能够极大的提高开发效率。
在 Web 前端开发工作中有很多“重复工作”,比如压缩CSS/JS文件。而这些工作都是有规律的。找到这些规律,并编写 gulp 配置代码,让 gulp 自动执行这些“重复工作”。
-
将规律转换为
gulp代码 -
现有目录结构如下:
└── js/
└── a.js
# 1.1 规律
- 找到
js/目录下的所有 .js文件 - 压缩这些
js文件 - 将压缩后的代码另存在
dist/js/目录下
# 1.2 编写 gulp 代码
// 压缩 JavaScript 文件
gulp.task('script', function() {
// 1. 找到
gulp.src('js/*.js')
// 2. 压缩
.pipe(uglify())
// 3. 另存
.pipe(gulp.dest('dist/js'));
});
# 1.3 代码执行结果
代码执行后文件结构
└── js/
│ └── a.js
└── dist/
└── js/
└── a.js
a.js 压缩前
function demo (msg) {
alert('--------\r\n' + msg + '\r\n--------')
}
demo('Hi')
a.js 压缩后
function demo(n){alert("--------\r\n"+n+"\r\n--------")}demo("Hi");
此时 dist/js 目录下的 .js 文件都是压缩后的版本。
你还可以监控 js/ 目录下的 js 文件,当某个文件被修改时,自动压缩修改文件。启动 gulp 后就可以让它帮助你自动构建 Web 项目。
gulp 还可以做很多事,例如:
- 压缩
CSS - 压缩图片
- 编译
Sass/LESS - 编译
CoffeeScript markdown转换为html
# 二、安装 Node 和 gulp
gulp 是基于 node 实现的,那么我们就需要先安装 node。
Node 是一个基于Chrome JavaScript V8引擎建立的一个平台,可以利用它实现 Web服务,做类似PHP的事。
打开 https://nodejs.org/ 点击绿色的 INSTALL 按钮下载安装 node。
# 2.1 命令行
在 Windows 中可按 <kbd>徽标键</kbd>(alt键左边)+ R 打开输入 cmd + Enter 打开命令行。
# 2.2 终端(Mac)
打开 Launchpad(像火箭一样的图标),在屏幕上方搜索框中输入 终端 + Enter 打开终端。
# 2.3 查看 node 版本号
在终端/命令行中输入 node -v 检测node是否安装成功,安装成功会显示出 node 的版本号。
# 2.4 跳转目录
终端/命令行 中可使用 cd 目录名 跳转至指定目录,Mac 中还可以使用 ls 查看当前目录下的文件列表。
# 2.5 Windows
Windows 下可使用如下命令跳转至指定目录:
// 跳转至 C 盘根目录
cd c:\
// 跳转至当前目录的 demo 文件夹
cd demo
// 跳转至上一级
cd ..
# 2.6 Mac
Mac 中建议只在 Documents 目录下进行文件操作。
// 跳转至文档目录
cd /Users/你的用户名/Documents/
// 或第一次打开终端时直接输入
cd Documents
// 查看目录下文件列表
ls
// 创建文件夹
mkdir demo
// 跳转至当前目录下的 demo 文件夹
cd demo
// 跳转至上级目录
cd ..
# 2.7 退出运行状态
如果你在命令行中启动了一些一直运行的命令,你的命令行会进入“运行”状态,此时你不可以在命令行进行其他操作。可通过 Ctrl + C 停止 gulp。(Mac 中使用 control + C)
后面的章节中如果代码中存在 gulp.watch 并在命令行运行了 gulp 则需要使用 Ctrl + C 退出任务。
# 2.8 npm 模块管理器
如果你了解 npm 则跳过此章节
若你不了解npm 请阅读 npm模块管理器
# 2.9 安装 gulp
npm 是 node`` 的包管理工具,可以利用它安装 gulp 所需的包。(在安装 node 时已经自动安装了 npm)
在命令行输入
npm install -g gulp
若一直没安装成功,请使用 cnpm 安装(npm的国内加速镜像)
意思是:使用 npm 安装全局性的(-g) gulp 包。
如果你安装失败,请输入
sudo npm install -g gulp使用管理员权限安装。(可能会要求输入密码)
安装时请注意命令行的提示信息,安装完成后可在命令行输入 gulp -v 以确认安装成功。
至此,我们完成了准备工作。接着让 gulp 开始帮我们干活吧!
# 三、使用 gulp 压缩 JS
压缩 js 代码可降低 js 文件大小,提高页面打开速度。在不利用 gulp 时我们需要通过各种工具手动完成压缩工作。
所有的 gulp 代码编写都可以看做是将规律转化为代码的过程。
- 规律
找到 js/ 目录下的所有 js 文件,压缩它们,将压缩后的文件存放在 dist/js/ 目录下。
gulp代码
gulp 的所有配置代码都写在 gulpfile.js 文件。
# 3.1 新建一个 gulpfile.js 文件
chapter2
└── gulpfile.js
# 3.2 在 gulpfile.js 中编写代码
// 获取 gulp
var gulp = require('gulp')
require()是 node (CommonJS)中获取模块的语法。在 gulp 中你只需要理解
require()可以获取模块。
# 3.3 获取 gulp-uglify 组件
// 获取 uglify 模块(用于压缩 JS)
var uglify = require('gulp-uglify')
# 3.4 创建压缩任务
// 压缩 js 文件
// 在命令行使用 gulp script 启动此任务
gulp.task('script', function() {
// 1. 找到文件
gulp.src('js/*.js')
// 2. 压缩文件
.pipe(uglify())
// 3. 另存压缩后的文件
.pipe(gulp.dest('dist/js'))
})
gulp.task(name, fn)- 定义任务,第一个参数是任务名,第二个参数是任务内容。gulp.src(path)- 选择文件,传入参数是文件路径。gulp.dest(path)- 输出文件gulp.pipe()- 管道,你可以暂时将 pipe 理解为将操作加入执行队列
参考:gulp API文档
# 3.5 跳转至 gulpfile.js 所在目录
打开命令行使用 cd 命令跳转至 gulpfile.js 文件所在目录。
例如我的 gulpfile.js 文件保存在 C:\gulp-book\demo\chapter2\gulpfile.js。
那么就需要在命令行输入
cd C:\gulp-book\demo\chapter2
Mac 用户可使用
cd Documents/gulp-book/demo/chapter2/跳转
# 3.6 使用命令行运行 script 任务
在控制台输入 gulp 任务名 可运行任务,此处我们输入 gulp script 回车。
注意:输入 gulp script 后命令行将会提示错误信息
// 在命令行输入
gulp script
Error: Cannot find module 'gulp-uglify'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
Cannot find module 'gulp-uglify' 没有找到 gulp-uglify 模块。
# 3.7 安装 gulp-uglify 模块
因为我们并没有安装 gulp-uglify 模块到本地,所以找不到此模块。
使用 npm 安装 gulp-uglify 到本地
npm install gulp-uglify
安装成功后你会看到如下信息:
gulp-uglify@1.1.0 node_modules/gulp-uglify
├── deepmerge@0.2.7
├── uglify-js@2.4.16 (uglify-to-browserify@1.0.2, async@0.2.10, source-map@0.1.34, optimist@0.3.7)
├── vinyl-sourcemaps-apply@0.1.4 (source-map@0.1.43)
├── through2@0.6.3 (xtend@4.0.0, readable-stream@1.0.33)
└── gulp-util@3.0.4 (array-differ@1.0.0, beeper@1.0.0, array-uniq@1.0.2, object-assign@2.0.0, lodash._reinterpolate@3.0.0, lodash._reescape@3.0.0, lodash._reevaluate@3.0.0, replace-ext@0.0.1, minimist@1.1.1, chalk@1.0.0, lodash.template@3.3.2, vinyl@0.4.6, multipipe@0.1.2, dateformat@1.0.11)
chapter2 $
在你的文件夹中会新增一个 node_modules 文件夹,这里面存放着 npm 安装的模块。
目录结构:
├── gulpfile.js
└── node_modules
└── gulp-uglify
接着输入 gulp script 执行任务
gulp script
[13:34:57] Using gulpfile ~/Documents/code/gulp-book/demo/chapter2/gulpfile.js
[13:34:57] Starting 'script'...
[13:34:57] Finished 'script' after 6.13 ms
# 3.8 编写 js 文件
我们发现 gulp 没有进行任何压缩操作。因为没有js这个目录,也没有 js 目录下的 .js 后缀文件。
创建 a.js 文件,并编写如下内容
// a.js
function demo (msg) {
alert('--------\r\n' + msg + '\r\n--------')
}
demo('Hi')
目录结构:
接着在命令行输入 gulp script 执行任务
目录结构:
# 3.9 检测代码修改自动执行任务
增加如下代码
- 规律