您的位置:首页 > Web前端 > JavaScript

《Gulp 入门指南》 : 使用 gulp 压缩 JS

2016-07-27 22:30 519 查看

《Gulp 入门指南》 : 使用 gulp 压缩 JS

请务必理解如下章节后阅读此章节:

安装 Node 和 gulp

访问论坛获取帮助

压缩 js 代码可降低 js 文件大小,提高页面打开速度。在不利用 gulp 时我们需要通过各种工具手动完成压缩工作。

所有的 gulp 代码编写都可以看做是将规律转化为代码的过程。

规律

找到
js/
目录下的所有 js 文件,压缩它们,将压缩后的文件存放在
dist/js/
目录下。

gulp 代码

你可以 下载所有示例代码在线查看代码

建议:你可以只阅读下面的代码与注释或同时阅读代码解释

gulp 的所有配置代码都写在
gulpfile.js
文件。

一、新建一个
gulpfile.js
文件

chapter2
└── gulpfile.js

二、在
gulpfile.js
中编写代码

// 获取 gulp
var gulp = require('gulp')


require()
是 node (CommonJS)中获取模块的语法。

在 gulp 中你只需要理解
require()
可以获取模块。

三、获取
gulp-uglify
组件

// 获取 uglify 模块(用于压缩 JS)
var uglify = require('gulp-uglify')

四、创建压缩任务

// 压缩 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文档

五、跳转至
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/
跳转

六、使用命令行运行 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
模块。

七、安装
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

八、编写 js 文件

我们发现 gulp 没有进行任何压缩操作。因为没有js这个目录,也没有 js 目录下的
.js
后缀文件。

创建
a.js
文件,并编写如下内容

// a.js
function demo (msg) {
alert('--------\r\n' + msg + '\r\n--------')
}

demo('Hi')

目录结构:

├── gulpfile.js
├──  js
│    └── a.js
└── node_modules
└── gulp-uglify

接着在命令行输入
gulp script
执行任务

gulp 会在命令行当前目录下创建
dist/js/
文件夹,并创建压缩后的
a.js
文件。

目录结构:

├── gulpfile.js
├──  js
│    └── a.js
├──  dist
│    └── js
│        └── a.js
└── node_modules
└── gulp-uglify

dist/js/a.js

function demo(n){alert("--------\r\n"+n+"\r\n--------")}demo("Hi");

九、检测代码修改自动执行任务

js/a.js
一旦有修改 就必须重新在命令行输入
gulp script
,这很麻烦。

可以使用
gulp.watch(src, fn)
检测指定目录下文件的修改后执行任务。

gulpfile.js
中编写如下代码:

// 监听文件修改,当文件被修改则执行 script 任务
gulp.watch('js/*.js', ['script']);

但是没有命令可以运行
gulp.watch()
,需要将
gulp.watch()
包含在一个任务中。

// 在命令行使用 gulp auto 启动此任务
gulp.task('auto', function () {
// 监听文件修改,当文件被修改则执行 script 任务
gulp.watch('js/*.js', ['script'])
})

接在在命令行输入
gulp auto
,自动监听
js/*.js
文件的修改后压缩js。

$gulp auto
[21:09:45] Using gulpfile ~/Documents/code/gulp-book/demo/chapter2/gulpfile.js
[21:09:45] Starting 'auto'...
[21:09:45] Finished 'auto' after 9.19 ms

此时修改
js/a.js
中的代码并保存。命令行将会出现提示,表示检测到文件修改并压缩文件。

[21:11:01] Starting 'script'...
[21:11:01] Finished 'script' after 2.85 ms

至此,我们完成了 gulp 压缩 js 文件的自动化代码编写。

注意:使用
gulp.watch
后你的命令行会进入“运行”状态,此时你不可以在命令行进行其他操作。可通过
Ctrl + C
停止 gulp。(Mac 中使用
control + C
)

Mac 下使用
control + C
停止 gulp

十、使用 gulp.task('default', fn) 定义默认任务

增加如下代码

gulp.task('default', ['script', 'auto']);

此时你可以在命令行直接输入
gulp
+回车,运行
script
auto
任务。

最终代码如下:

// 获取 gulp
var gulp = require('gulp')
// 获取 uglify 模块(用于压缩 JS) var uglify = require('gulp-uglify')
// 压缩 js 文件 // 在命令行使用 gulp script 启动此任务 gulp.task('script', function() { // 1. 找到文件 gulp.src('js/*.js') // 2. 压缩文件 .pipe(uglify()) // 3. 另存压缩后的文件 .pipe(gulp.dest('dist/js')) })// 在命令行使用 gulp auto 启动此任务 gulp.task('auto', function () { // 监听文件修改,当文件被修改则执行 script 任务 gulp.watch('js/*.js', ['script']) })
// 使用 gulp.task('default') 定义默认任务
// 在命令行使用 gulp 启动 script 任务和 auto 任务
gulp.task('default', ['script', 'auto'])

去除注释后,你会发现只需要 11 行代码就可以让 gulp 自动监听 js 文件的修改后压缩代码。但是还有还有一些性能问题和缺少容错性,将在后面的章节详细说明。

你可以访问 gulp-uglify 以查看更多用法。

访问论坛获取帮助

接着阅读:使用 gulp 压缩 CSS


你可以直接访问 GitHub: gulp-book 查看本书


目录:

安装 Node 和 gulp

使用 gulp 压缩 JS

使用 gulp 压缩 CSS

使用 gulp 压缩图片

使用 gulp 编译 LESS

使用 gulp 编译 Sass

使用 gulp 构建一个项目

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


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


打开 https://nodejs.org/ 点击绿色的 INSTALL 按钮下载安装 node。

访问论坛获取帮助

使用终端/命令行

命令行

在 Windows 中可按 徽标键(alt键左边)+ R 打开输入
cmd
+ Enter 打开命令行。

终端

打开 Launchpad(像火箭一样的图标),在屏幕上方搜索框中输入
终端
+ Enter 打开终端。

查看 node 版本号

在终端/命令行中输入
node -v
检测node是否安装成功,安装成功会显示出 node 的版本号。

跳转目录

终端/命令行 中可使用
cd 目录名
跳转至指定目录,Mac 中还可以使用
ls
查看当前目录下的文件列表。

Windows

Windows 下可使用如下命令跳转至指定目录:

// 跳转至 C 盘根目录 cd c:// 跳转至当前目录的 demo 文件夹 cd demo // 跳转至上一级 cd ..

Mac

Mac 中建议只在 Documents 目录下进行文件操作。

// 跳转至文档目录 cd /Users/你的用户名/Documents/ // 或第一次打开终端时直接输入 cd Documents // 查看目录下文件列表 ls // 创建文件夹 mkdir demo // 跳转至当前目录下的 demo 文件夹 cd demo // 跳转至上级目录 cd ..

退出运行状态

如果你在命令行中启动了一些一直运行的命令,你的命令行会进入“运行”状态,此时你不可以在命令行进行其他操作。可通过
Ctrl + C
停止 gulp。(Mac 中使用
control + C


后面的章节中如果代码中存在
gulp.watch
并在命令行运行了
gulp
则需要使用
Ctrl + C
退出任务。

npm 模块管理器

如果你了解 npm 则跳过此章节

若你不了解npm 请阅读 npm模块管理器

安装 gulp

npm 是 node 的包管理工具,可以利用它安装 gulp 所需的包。(在安装 node 时已经自动安装了 npm)

在命令行输入

npm install -g gulp

若一直没安装成功,请使用 cnpm 安装(npm的国内加速镜像)

意思是:使用 npm 安装全局性的(
-g
) gulp 包。


如果你安装失败,请输入
sudo npm install -g gulp
使用管理员权限安装。(可能会要求输入密码)


安装时请注意命令行的提示信息,安装完成后可在命令行输入
gulp -v
以确认安装成功。

至此,我们完成了准备工作。接着让 gulp 开始帮我们干活吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: