《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
目录:
安装 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 开始帮我们干活吧!
相关文章推荐
- Iframe+js 异步上传
- curl上传文件
- JS中字符串与字符数组相互转化
- js基础
- 使用Jsoup 抓取页面的数据
- Jsoup参考文档
- JavaScript eval() 函数
- javascript-计算24
- JSON转换包含Date日期属性的对象的List集合报错问题
- js 的 深拷贝 和 浅拷贝
- JavaScript - 基于原型的面向对象
- 认识Servlet
- JSTL的配置与使用
- [php学习十二]javaScript的基本练习3-Dom
- Js制作移动漂浮广告
- JS自学|常用互动方法
- Js 基础学习之--模拟加入购物车
- JavaScript中Date对象
- JavaScript中Math对象和test()方法
- Js基础学习之-- 利用GET方法实现ajax请求