前端工程构建之谈:gulp3要不要升级到Gulp4
关于升级还是不升级,这是一个哲学问题。
gulp4的语法更加现代,支持ES6的大部分写法,使用exports的方式去暴露任务组合,更加灵活和便捷。
gulp4同时也提供了很多强大的API,例如parallel()和series()。此外,gulp4不再支持同步任务,所以可以看到编写任务的时候也不再推荐使用.task()方法去编写,而是独立定义一个函数方法,然后用return去返回一个回调函数的结果。例如一个处理的css的任务,定义如下。
function minHeaderCss() {
// 这是一个回调函数的返回对象,本身也是异步的
return src([
'./static/css/header.css',
'./static/css/boot.css',
'./static/css/wrap.css',
'./static/css/feedback.css',
'./static/css/pronemove.css'
])
.pipe(minCss())
.pipe(concat('main_header.min.css'))
.pipe(dest('./static/css/min/'));
}
parallel()是并行执行多个任务(task),一个任务的错误将整个任务组合都结束,但是其他并行的任务可能执行完,也可能执行完。
series()是顺序执行,任何一个任务出错,所有后续任务都停止,有点单线程的感觉。
这两个方法都可以从gulp里面获得,如下。
const { series, parallel } = require('gulp');
只需要将需要执行的任务添加到series()或者parallel()里面即可:
const { series, parallel } = require('gulp');
function javascript(cb) {
// body omitted
cb();
}
function css(cb) {
// body omitted
cb();
}
exports.build = series(javascript, css);
exports.buildParallel = parallel(javascript, css)
如果想执行build任务组合,那么在命令行中执行如下语句:
gulp build
至于使用哪种方式,还是要是否构建过程很漫长。如果构建的步骤多,任务重,时间又长,肯定有限考虑使用parallel()来并行构建任务组合。
不同的任务组合还可以进行二次组合,可以对一些适合顺序执行的任务使用series(),对一些适合并行的任务使用parallel()。例如一些需要babel编译的Sass和js的任务使用parallel(),一个比较完整的构建脚本如下所示:
const {src, dest, watch, series, parallel, connect} = require('gulp');
const babel=require('gulp-babel');
const revAll = require('gulp-rev-all');
const cssver = require('gulp-make-css-url-version');
const del = require('del');
const htmlmin = require('gulp-htmlmin');
// 可以使用ES6 => 语法来编写任务
const babelCss = () => src(['./css/**/*.css'])
.pipe(cssver())
.pipe(cleancss({compatibility: 'ie7', format: 'keep-breaks', keepSpecialComments :'*'}))
.pipe(dest('./dist/css/'))
.pipe(connect.reload());
function babelJs() {
return src(['./js/**/*.js'])
.pipe(babel({presets: ['@babel/env']}))
.pipe(uglify({
mangle:true,
compress:true})
.pipe(dest('./dist/js/'))
.pipe(revAll.manifestFile())
.pipe(dest('./dist/rev/'));
}
function clean() {
return del('./dist');
}
function babelHtml() {
return src(['./app/tpl/*.html'])
.pipe(htmlmin({
removeComments: true,
collapseWhitespace: true
}))
.pipe(dest('./dist/html/'));
}
// 嵌套使用series和parallel
export.build = exports.build = series(clean,parallel(babelJs, babelCss),babelHtml);
这还是一个简易的构建脚本,还缺少一个watch,监听项目中css、js、html文件的变化,一旦发生变化就触发对应的方法。gulp服务一直运行着,实时刷新。
我个人认为,如果是长期维护的项目,还是可以考虑拥抱gulp4,毕竟Gulp4的强大,是真香!
前端工程构建之谈:gulp3要不要升级到Gulp4的更多相关文章
- fis3前端工程构建配置入门教程
一.前言 fis3是百度推出的一款前端工程构建工具,类似的还有webpack,gulp等工具:无论大家有没有使用过,从事前端行业应该都略知一二了,所以对于此类工具用干嘛的我这里就不做重复了. 其实对于 ...
- 前端工程构建工具FIS3
FIS3 是面向前端的工程构建工具.解决前端工程中性能优化.资源加载(异步.同步.按需.预加载.依赖管理.合并.内嵌).模块化开发.自动化工具.开发规范.代码部署等问题. 一.安装 全局安装fis3 ...
- 前端工程构建工具之Yeoman
一.Yeoman 简介 通常在开发新项目时我们都需要配置工程环境,开发目录,需要下载一些库.框架文件(如 jQuery.Backbone 等),配置编译环境(Less.Sass.Coffeescrip ...
- 前端工程构建工具——Yeoman
一.Yeoman 简介 通常在开发新项目时我们都需要配置工程环境,开发目录,需要下载一些库.框架文件(如 jQuery.Backbone 等),配置编译环境(Less.Sass.Coffeescrip ...
- 前端资源构建-Grunt环境搭建
前端资源构建-Grunt 随着前端开发的复杂度越来越高,前端页面动辄上几十个js,十几个html页面.用户打开一个页面需要加载一堆的css,js,html文件,对于有大量用户的web应用来说,既消耗服 ...
- [转]gulp构建前端工程
摘要: Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript. ...
- 前端工程的构建工具对比 Gulp vs Grunt
1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Maven.Node催生了一批自动化工 ...
- 绝对精品推荐做前端的看下:Web前端开发体会十日谈
20151208感悟: 前端人的角度来看的话,感觉像是阅读一个大牛前端的全部武功的一个秘籍说明,里面的思想高价值蛋白真是太多太多,推荐看. Web前端开发体会十日谈 一直想写这篇“十日谈”,聊聊我对W ...
- 前端自动化构建工具gulp的使用总结
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
随机推荐
- Spring框架之spring-web http源码完全解析
Spring框架之spring-web http源码完全解析 Spring-web是Spring webMVC的基础,由http.remoting.web三部分组成. http:封装了http协议中的 ...
- 手把手教你使用Python轻松搞定发邮件
前言 现在生活节奏加快,人们之间交流方式也有了天差地别,为了更加便捷的交流沟通,电子邮件产生了,众所周知,电子邮件其实就是客户端和服务器端发送接受数据一样,他有一个发信和一个收信的功能,电子邮件的通信 ...
- Nocalhost,让开发回归原始又简单
在刚刚结束的 2020 腾讯云 Techo Park 大会 DevOps 分论坛「开发乘云起,扶摇九万里」上,CODING CEO 张海龙发布了由 CODING 团队自主研发的全新产品 Nocalho ...
- 关于新创公司所需的icp,网文,软著和备案的申请
刚从一个集团离职来到了创业团队,前期是什么都没有,甚至是公司名字都不知道,哈哈.所以就有了后面的坑踩了一遍又一遍.刚开始是在霍尔果斯注册,结果办icp费了半年的时间,东找西找还没下证.又碰上新疆严查不 ...
- PHP功能代码片段
1.连接MYSQL数据库代码 <?php $connec=mysql_connect("localhost","root","root&qu ...
- App Shortcuts 快捷方式:Android 的 '3D Touch'
Hello Shortcuts 从Android7.1(API level25)开始,开发者可以为自己的app定制shortcuts.shortcuts使用户更便捷.快速的使用app.我个人感觉有点像 ...
- 自动化运维工具-Ansible之1-基础
自动化运维工具-Ansible之1-基础 目录 自动化运维工具-Ansible之1-基础 Ansible 基本概述 定义 特点 架构 工作原理 任务执行模式 命令执行过程 Ansible 安装 Ans ...
- 被自己以为的GZIP秀到了
问题的开始 我司某产品线有这么一个神奇接口 (https://host/path/customQuery) 该接口在预发或线上缓存正常的情况下TTFB为150ms左右(可以认为服务处理时间差不多就是T ...
- 如何使用容器镜像服务 TCR 轻松实现容器 DevOps
作者周明,腾讯云容器产品工程师.目前主要负责腾讯云TKE.TCR等产品控制台的相关研发工作. 概述 当你使用云厂商提供的容器服务部署业务服务后,是否对交付部署全链路的效率有更高的需求,例如实现基于容器 ...
- 一文搞懂Java引用拷贝、深拷贝、浅拷贝
刷题.面试中,我们可能会遇到将一个对象的属性赋值到另一个对象的情况,这种情况就叫做拷贝.拷贝与Java内存结构息息相关,搞懂Java深浅拷贝是很必要的! 在对象的拷贝中,很多初学者可能搞不清到底是拷贝 ...