zoukankan      html  css  js  c++  java
  • 《Gulp 入门指南》 : 使用 gulp 压缩 JS

    《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-bookdemochapter2gulpfile.js 。

    那么就需要在命令行输入

    cd C:gulp-bookdemochapter2

    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('--------
    ' + msg + '
    --------')
    }
    
    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("--------
    "+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 开始帮我们干活吧!

  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/timssd/p/5712877.html
Copyright © 2011-2022 走看看