前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版

gulp学习总结篇

首页2017-01-13 18:20:43Build
gulp

声明 本教程整理于互联网

# 一、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 还可以做很多事,例如:

  1. 压缩CSS
  2. 压缩图片
  3. 编译Sass/LESS
  4. 编译CoffeeScript
  5. 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')
@前端进阶之旅: 代码已经复制到剪贴板

目录结构:

fe
  • 一、gulp 入门简介
    • 1.1 规律
    • 1.2 编写 gulp 代码
    • 1.3 代码执行结果
  • 二、安装 Node 和 gulp
    • 2.1 命令行
    • 2.2 终端(Mac)
    • 2.3 查看 node 版本号
    • 2.4 跳转目录
    • 2.5 Windows
    • 2.6 Mac
    • 2.7 退出运行状态
    • 2.8 npm 模块管理器
    • 2.9 安装 gulp
  • 三、使用 gulp 压缩 JS
    • 3.1 新建一个 gulpfile.js 文件
    • 3.2 在 gulpfile.js 中编写代码
    • 3.3 获取 gulp-uglify 组件
    • 3.4 创建压缩任务
    • 3.5 跳转至 gulpfile.js 所在目录
    • 3.6 使用命令行运行 script 任务
    • 3.7 安装 gulp-uglify 模块
    • 3.8 编写 js 文件
    • 3.9 检测代码修改自动执行任务
    • 3.10 使用 gulp.task(‘default’, fn) 定义默认任务
  • 四、使用 gulp 压缩 CSS
    • 4.1 安装 gulp-minify-css模块
    • 4.2 参照 [使用 gulp 压缩 JS]创建 gulpfile.js 文件编写代码
    • 4.3 创建 css 文件
    • 4.4 运行 gulp 查看效果
  • 五、使用 gulp 压缩图片
    • 5.1 安装 gulp-imagemin 模块
    • 5.2 创建 gulpfile.js 文件编写代码
    • 5.3 在 images/ 目录下存放图片
    • 5.4 运行 gulp 查看效果
  • 使用 gulp 编译 LESS
  • 安装
  • 基本用法
  • LESS 代码和编译后的CSS代码
  • 六、使用 gulp 编译 Sass
    • 6.1 gulp-sass
    • 6.2 安装
    • 6.3 基本用法
  • 七、使用 gulp 构建一个项目
    • 7.1 package.json
    • 7.2 安装依赖
    • 7.3 设计目录结构
    • 7.4 让命令行输出的文字带颜色
    • 7.5 配置 JS 任务
      • 7.5.1 gulp-uglify
      • 7.5.2gulp-watch-path
      • 7.5.3 watchPath(event, search, replace, distExt)
      • 7.5.4 stream-combiner2
      • 7.5.5 gulp-sourcemaps
    • 7.6 配置 CSS 任务
      • 7.6.1 gulp-minify-css
      • 7.6.2 gulp-autoprefixer
    • 7.7 配置 Less 任务
    • 7.8 配置 Sass 任务
    • 7.9 配置 image 任务
    • 7.10 配置文件复制任务

← webpack学习总结(一)JavaScript运动框架之速度时间版本 →