前端工程构建之谈: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 ...
随机推荐
- 使用Canvas绘制分享海报
这几天接到一个需求,需要将一个邀请链接转换为一个带有二维码并且能够分享出去的海报图,网上找了很多的方法,也踩了不少的坑,希望大家遇到类似的需求能够少走弯路.. 具体效果图如下: 效果图 首先我采用了 ...
- Python Cvxopt安装及LP求解
Python 2.7 Pycharm 1.直接File>Settings>Project>InterPreter ,点击右侧'+' 弹出Available packages窗口,搜索 ...
- C# 锁与死锁
什么是死锁: 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进. 因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再 ...
- 【命令】glances命令和dstat命令
https://www.cnblogs.com/l75790/articles/9197829.html 文章里面的进程和作业管理篇
- Java学习_异常处理
Java的异常 计算机程序运行的过程中,总是会出现各种各样的错误.有一些错误是用户造成的,比如,希望用户输入一个int类型的年龄,但是用户的输入是abc.程序想要读写某个文件的内容,但是用户已经把它删 ...
- sql中大于等于小于的写法
由于在mybatis框架的xml中<= , >=解析会出现问题,编译报错,所以需要转译第一种写法: 原符号 < <= > >= & ' "替换符号 ...
- IDEA git 切换分支
如图:打开DIEA , 在右下角找到Git分支 , 然后选择你要切换的分支 , 最后选择 Checkout
- Linux介绍及系统安装
1.Linux入门介绍 1.1简介 Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(Portable Operating System In ...
- hive之Json解析(普通Json和Json数组)
一.数据准备 现准备原始json数据(test.json)如下: {"movie":"1193","rate":"5", ...
- docker nginx 自定义配置容器
准备 拉取nginx官方镜像 docker pull nginx etc/nginx/ 下新建目录 cert 和 conf cert 存放证书 conf 存放配置文件 mkdir /etc/nginx ...