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

请务必理解如下章节后阅读此章节:
  1. 安装 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 查看本书

目录:

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 开始帮我们干活吧!

《Gulp 入门指南》 : 使用 gulp 压缩 JS的更多相关文章

  1. Gulp使用入门操作十一步压缩JS

    前提需要安装nodejs 一. 全局安装Gulp npm install -g gulp 二.新建一个 gulpfile.js 文件 chapter2└── gulpfile.js 三.在 gulpf ...

  2. gulp 入门指南

    gulp 是基于 node 实现 Web 前端自动化开发的工具,利用它能够极大的提高开发效率. 在 Web 前端开发工作中有很多"重复工作",比如压缩CSS/JS文件.而这些工作都 ...

  3. windows下Gulp入门详细教程 &&gulp安装失败的原因(红色)

    以下教程亲自实践可行: 另外添加一个Gulp自动编译.压缩.更新.测试的教程链接:https://markpop.github.io/2014/09/17/Gulp%E5%85%A5%E9%97%A8 ...

  4. gulp入门指南

    1. 全局安装 gulp: $ npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: $ npm install --save-dev ...

  5. gulp入门-压缩js/css文件(windows)

    类似于grunt,都是基于Node.js的前端构建工具.不过gulp压缩效率更高. 工具/原料 nodejs/npm 方法/步骤 首先要确保pc上装有node,然后在global环境和项目文件中都in ...

  6. gulp自动刷新和css、js压缩

    之前搭建过Grunt,但是用起来有点繁琐,后来有人跟我说gulp更多简单.所以今天又搭建一个gulp.在使用gulp前应该有nodeJs环境,安装完nodejs后,就可以开始gulp的搭建了. 先新建 ...

  7. gulp 压缩js,css

    最近做的前端项目中发现引用的js包太多,导致页面加载时反应很慢,所以首先想到的是将js和css压缩,提高加载速度. 我们先来看看抓到的当前页面响应时间: 页面异步加载,需要响应时间 7.41秒,这也太 ...

  8. Gulp学习指南之CSS合并、压缩与MD5命名及路径替换(转载)

    本文转载自: Gulp学习指南之CSS合并.压缩与MD5命名及路径替换

  9. gulp入坑系列(2)——初试JS代码合并与压缩

    在上一篇里成功安装了gulp到项目中,现在来测试一下gulp的合并与压缩功能 gulp入坑系列(1)--安装gulp(传送门):http://www.cnblogs.com/YuuyaRin/p/61 ...

随机推荐

  1. 20151225jquery学习笔记---选项卡UI

    圣诞节快乐,哈哈哈....选项卡(tab),是一种能提供给用户在同一个页面切换不同内容的 UI. 尤其是在页面布局紧凑的页面上,提供了非常好的用户体验.一. 使用 tabs使用 tabs 比较简单,但 ...

  2. poj1182 食物链(种类并查集)详解

    poj 1182   http://poj.org/problem?id=1182 分析:这个题大意说的非常清楚了,就是求出假话的个数,题目中给的假话要求有三个 ① 当前的话与前面的某些真的话冲突,是 ...

  3. C#常用正则验证

    #region Protected Property protected Regex rLetters { get { return new Regex("[a-zA-Z]{1,}" ...

  4. IrisSkin4控件使用方法

    参考如下: 1. 将IrisSkin4.dll动态文件导入当前项目引用中.具体操作为:解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin4.dll ...

  5. IOS_OC_百度地图与社交分享

    前奏. 知识点介绍 一. 导航和画线 地图画线 (理解) 二. 百度地图 集成百度地图 (掌握) POI检索 (掌握) 三. 社交分享 系统自带分享 (了解) 友盟分享 (掌握) SSO授权 (理解) ...

  6. iOS 多张图片保存到相册问题(add multiple images to photo album)

    不知道朋友们有木有做过多图保存到系统的相册这个需求,我在用`UIImageWriteToSavedPhotosAlbum`保存图片时候,在代理回调方`didFinishSavingWithError` ...

  7. javascript 函数学习

    1.自以为好的部分,更多访问: http://www.runoob.com/js/js-tutorial.html 2.this 3.new 4.闭包 5.自执行

  8. java新手笔记6 示例for

    1.计算天数 /*给定一个年月日,计算是一年的第几天 (如输入:2 15 结果:第46天) */ public class Demo1 { public static void main(String ...

  9. 暑假集训(2)第九弹 ----- Points on Cycle(hdu1700)

                                                Points on Cycle Time Limit:1000MS     Memory Limit:32768 ...

  10. 2016.08.07计算几何总结测试day2

    T1 bzoj: [Usaco2010 OPen]Triangle Counting 数三角形 看到这个题n那么大, 于是想到极角排序搞一搞,然而排完序后立马懵逼,完全不知道接下来应该怎么写.... ...