gulp4.0入门和实战

我最近遇到需要优化web的性能的任务,然后就捣鼓了一些对资源文件优化压缩的方案。由于之前的项目中有使用到gulp,所以在需要处理的web项目中也优先使用这个技术。

先聊聊gulp是什么?

gulp被称为基于流的自动化构建工具,也是用NodeJS编写的额。使用NodeJs对文件流的异步处理,可以对资源文件(js和css以及图片)进行优化处理,包括文件的合并和文件内容的压缩。最重要的是,这些工作都是自动化的,只要我们编写好gulpfile.js文件即可!

相较于webpack, gulp也更简单,更基于面向过程的编程,适合需求简单的打包压缩工作。

最新版本的gulp是4.x,和之前的3.x的gulp有所不同,把cli分离出去了,所以需要单独安装gulp-cli。

在项目中使用gulp就简单三步:

  • *1**. 安装gulp-cli
npm install gulp-cli -save

** 2**. 安装gulp

npm install gulp -D --save
  • *3**. 创建gulpfile.js

这第三步是和业务有关的,比如我想对一些css和js文件进行优化,那么需要引入gulp和需要的plugin,代码如下。

// 引入gulp对象和插件
const {src, dest} = require('gulp');
const {series} = require('gulp');
const cssMin = require('gulp-minify-css');
const uglify=require('gulp-uglify');
const concat = require('gulp-concat');

然后封装两个方法,分别处理css文件和js文件。首先是针对css文件的处理,如下:

function dealCss() {
return src([
'./myapp/static/css/mobile.css',
'./myapp/static/css/all.css',
'./myapp/static/css/tablet.css',
'./myapp/static/css/wag.css'
]).pipe(concat('base.min.css')) // 合并成指定文件
.pipe(cssMin()) // 压缩
.pipe(dest('./myapp/css')); // 设置输出路径

上面的代码就把mobile.css、all.css和tablet.css以及wag.css合并成一个文件base.min.css,并做了压缩优化(minize)。

在编写一个js文件的处理,如下:

function dealJs() {
return src([
'./myapp/js/image.js',
'./myapp/js/bar.js',
'./myapp/js/search.js',
'./myapp/js/tiny-images.js'
]).pipe(concat('imagepage.min.js'))
.pipe(uglify({ mangle : false }))
.pipe(dest('./myapp/pure/js/'));
}

最后就是把这两个定义的方法(在gulp来看就是需要被回调的任务)放置到任务队列里面,有两种选择,一种是使用并行的方式执行,一种是使用同步的方法执行,也就是一个任务执行完再按照顺序执行下一个任务。

这里我们不缺时间,就顺序执行即可:

exports.default =series(dealCss, dealJs);

完整的代码如下所示:

// 引入gulp对象和插件
const {src, dest} = require('gulp');
const {series} = require('gulp');
const cssMin = require('gulp-minify-css');
const uglify=require('gulp-uglify');
const concat = require('gulp-concat'); function dealCss() {
return src([
'./myapp/static/css/mobile.css',
'./myapp/static/css/all.css',
'./myapp/static/css/tablet.css',
'./myapp/static/css/wag.css'
]).pipe(concat('base.min.css')) // 合并成指定文件
.pipe(cssMin()) // 压缩
.pipe(dest('./myapp/css')); // 设置输出路径 function dealJs() {
return src([
'./myapp/js/image.js',
'./myapp/js/bar.js',
'./myapp/js/search.js',
'./myapp/js/tiny-images.js'
]).pipe(concat('imagepage.min.js'))
.pipe(uglify({ mangle : false }))
.pipe(dest('./myapp/pure/js/'));
} exports.default = series(dealCss, dealJs);

执行gulp命令就可以自动完成上面两个任务,gulp真的很高效!

还可以选择并行的执行多个任务,只需要把最后一行代码改为:

exports.default = parallel(dealCss, dealJs);

parallel()可以让多个任务被并行执行,一个任务发生错误,其他任务不受影响。而series必行安顺序执行,所以一旦有报错,后面的任务就不会被执行。通常如果有报错,我们肯定需要解决它,所以在日常优化资源的场景下选择series更为常用。

Gulp4.0入门和实战的更多相关文章

  1. TensorFlow 2.0 入门教程实战案例

    中文文档 TensorFlow 2 / 2.0 中文文档 知乎专栏 欢迎关注知乎专栏 https://zhuanlan.zhihu.com/geektutu 一.实战教程之强化学习 TensorFlo ...

  2. 微信小程序入门与实战 从0到1进行细致讲解 涵盖小程序开发核心技能下载

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  3. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  4. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

  5. SignalR 2.0 入门与提高

    SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...

  6. Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

  7. Sping Boot入门到实战之入门篇(二):第一个Spring Boot应用

    该篇为Spring Boot入门到实战系列入门篇的第二篇.介绍创建Spring Boot应用的几种方法. Spring Boot应用可以通过如下三种方法创建: 通过 https://start.spr ...

  8. Sping Boot入门到实战之实战篇(一):实现自定义Spring Boot Starter——阿里云消息队列服务Starter

    在 Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置 这篇中,我们知道Spring Boot自动化配置的实现,主要由如下几部分完成: @EnableAutoConfigu ...

  9. Apache Atlas元数据管理从入门到实战(1)

    一.前言   元数据管理是数据治理非常重要的一个方向,元数据的一致性,可追溯性,是实现数据治理非常重要的一个环节.传统数据情况下,有过多种相对成熟的元数据管理工具,而大数据时代,基于hadoop,最为 ...

随机推荐

  1. python 安装相关

    一.安装python 1.官网下载python 1.1 可下载绿色版 2.2 也可下载安装版,安装时可自动安装pip 和 自动配置环境变量 2.手动配置环境变量,我的电脑>属性>高级> ...

  2. Eureka系列(九)Eureka自我保护机制

      因为本篇简文并不是自己总结的,而是当了下搬运工,所以直接直接附上原作者博客链接. 参考链接:   1.SpringCloud Eureka自我保护机制   2.Spring Cloud Eurek ...

  3. SpringBoot从入门到精通教程(四)

    前端时间整合SSM ,发现了一个现象,在整合的时候 配置文件过于复杂. 1.建工程,建目录,导入jar包. 2.配置 数据源 映射信息 等等 ... 3. 还有 各种 拦截器,控制器 ,头都大了... ...

  4. 在linux下搭建NFS服务器实现文件共享

    目录 一.关于NFS 二.搭建一台NFS服务器共享特定资源 三.调优 一.关于NFS 1.NFS是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系 ...

  5. Python机器学习课程:线性回归算法

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 最基本的机器学习算法必须是具有单个变量的线性回归算法.如今,可用的高级机器学习算法,库和技术如此之多 ...

  6. 为什么Python多线程无法利用多核

    1.全局解释锁 如题: Python的多线程为什么不能利用多核处理器? 全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的一种机制,它使得任何时刻仅 ...

  7. 自动测试LeetCode用例方法

    自动合并测试LeetCode解题方法 在leetcode.com上答题,Run Code或者Sumbmit通常要Spending一会,如果提交一次就Accepted那还好,如果反复Wrong Answ ...

  8. MGRE实验--内网为OSPF

    实验要求: R2为ISP,只能配置IP地址 R1.R3.R4之间构建MGRE环境,仅R1IP地址固定 内网使用OSPF获取路由,全网可达 拓扑: 1.配置IP地址 2.配置缺省 3.配置MGRE环境 ...

  9. Spring Boot 与 Spring MVC到底有什么区别

    前言 Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向 ...

  10. Apache Calcite 论文学习笔记

    特别声明:本文来源于掘金,"预留"发表的[Apache Calcite 论文学习笔记](https://juejin.im/post/5d2ed6a96fb9a07eea32a6f ...