gulp处理错误
Gulp 目前的错误处理方式有点操蛋,一旦发生错误进程就挂了,得手动去重启。虽然开发者预期在 gulp 4 中解决此问题 ,但 gulp 4 什么时候发布并没有明确时间表,在此之前,还是很有必要了解一下更优雅的错误处理方式,除非你钟情于反复在命令行里输入 gulp
然后回车。
使用 Stream 事件 API 处理错误
Stream 发生错误时,会触发 error
事件,监听 error
事件进行错误处理可以避免 gulp 进程崩溃。
基本错误处理
下面的例子中,添加了 Less 编译的错误处理,Less 发生编译错误时,会在命令行输出错误信息,gulp 进程不会挂掉,修正错误后,watch 任务将继续执行。
注意:使用 gulp-util 只是使错误日志格式与 gulp 的日志保持一致,如果不想多一个依赖,可以直接使用 console
。
var gulp = require('gulp');
var less = require('gulp-less');
var csso = require('gulp-csso');
var gutil = require('gulp-util'); gulp.task('less', function() {
return gulp.src('less/app.less')
.pipe(less())
.on('error', function(err) {
gutil.log('Less Error!', err.message);
this.end();
})
.pipe(csso())
.pipe(gulp.dest('./dist'))
}); gulp.task('watch', function() {
gulp.watch('less/**/*.less', ['less']);
});
gulp.watch 与 Browserify 中的错误处理
Browserify 中的常规流与 gulp 中的 vinyl 对象流有点不同,browserify 的错误处理中需要手动触发 end
事件,以停止流在管道中传送。如果不添加 this.emit('end');
,进程仍然会挂掉。
var gulp = require('gulp');
var browserify = require('browserify');
var source = require("vinyl-source-stream"); gulp.task('browserify', function(){
return browserify('./main.js').bundle()
.on('error', function(err){
console.log(err.message);
this.emit('end');
})
.pipe(source('main.out.js'))
.pipe(gulp.dest('./dist'));
});
使用插件
使用 Stream 的事件 API 虽然可以处理错误,但是在每个插件后面都需要添加错误监听函数,有点恶心,还好有专门的插件处理这个问题。
gulp-plumber
gulp-plumber 可以阻止 gulp 插件发生错误导致进程退出并输出错误日志。
var gulp = require('gulp');
var less = require('gulp-less');
var csso = require('gulp-csso');
var plumber = require('gulp-plumber');
gulp.task('less', function() {
return gulp.src('less/app.less')
.pipe(plumber())
.pipe(less())
.pipe(csso())
.pipe(gulp.dest('./dist'))
});
这比添加错误监听事件省事多了。
stream-combiner2
stream-combiner2 把多个 stream 合并为一个,也就是说只需要添加一个错误监听,相比之下,还是 gulp-plumber 方便。
var combiner = require('stream-combiner2');
var uglify = require('gulp-uglify');
var gulp = require('gulp'); gulp.task('test', function() {
var combined = combiner.obj([
gulp.src('bootstrap/js/*.js'),
uglify(),
gulp.dest('public/bootstrap')
]); // any errors in the above streams will get caught
// by this listener, instead of being thrown:
combined.on('error', console.error.bind(console)); return combined;
});
gulp处理错误的更多相关文章
- gulp遇到错误:The following tasks did not complete: default Did you forget to signal async completion?
运行之后会像下面一样报这个错误,因为事按着一个视频来写的,所以 原本的gulpfile.js如下 const gulp = require('gulp') gulp.task('default',() ...
- gulp 打包错误 TypeError: Path must be string. Received undefined
Running gulp gives “path.js:7 throw new TypeError('Path must be a string. Received ' + inspect(path) ...
- gulp使用小结(一)
这篇文章不会介绍 gulp 的起源.发展:不会去一个个讲解 gulp API:也不想出现大段大段的 gulpfile.js 代码:更木有帮你分析 gulp 实现原理,只有一些我自己对 gulp 的使用 ...
- gulp前端自动化构建工具使用
(1)新建项目目录gulp_web (2)项目目录下建目录src里面存放需要进行gulp处理的文件目录及文件 (3)gulpfile.js文件内容为声明需要打包应用的gulp组件及打包文件路径和打包任 ...
- 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
用gulp启动,错误如下 Error: watch ENOSPC at exports._errnoException (util.js:746:11) at FSWatcher.start (fs. ...
- 一篇迟到的gulp文章
前言 这篇文章本应该在去年17年写的,但因为种种原因没有写,其实主要是因为懒(捂脸).gulp出来的时间已经很早了,16年的时候还很流行,到17年就被webpack 碾压下去了,不过由于本人接触gul ...
- 一篇迟到的gulp文章,代码合并压缩,less编译
前言 这篇文章本应该在去年17年写的,但因为种种原因没有写,其实主要是因为懒(捂脸).gulp出来的时间已经很早了,16年的时候还很流行,到17年就被webpack 碾压下去了,不过由于本人接触gul ...
- gulp常用插件之gulp-notify使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-notify这是一款gulp通知插件. 更多使用文档请点击访问gulp-notify工具官网. 安装 一键安装不多解释 npm inst ...
- ES6转换器之Babel
ES6部分功能没有支持,所以想学习ES6,得先有个转换器,就是将ES6的代码转换为ES5. 我这里用的是Gulp + Bable的形式来将ES6转换为ES5的. 前提: (1).Gulp和Bable都 ...
随机推荐
- JavaWeb学习总结(十六)Cookie保存中文内容
Cookie的值保存中文内容,可以使用Java.net.URLDecoder进行解码. 示例: <%@page import="java.net.URLDecoder"%&g ...
- [Ubuntu] apt 添加第三方库
1. 方法一:直接在 /etc/apt/sources.list 添加第三方库. $ sudo vi /etc/apt/sources.list 在其中添加: deb http://archive.s ...
- Kafka配置SSL(云环境)
本文结合一个具体的实例给出如何在公有云环境上配置Kafka broker与client之间的SSL设置. 测试环境 阿里云机一台(Server端):主机名是kafka1,负责运行单节点的Kafka集群 ...
- centos6.4搭建ftp服务器
在centos环境下搭建ftp服务器,选择用vsftpd. 1.检测是否已经安装vsftpd # rpm -qa | grep vsftpd 如果已经安装vsftpd,会显示相应版本号.没有任何提示, ...
- 【node.js】Error: CERT_UNTRUSTED
背景 : 在linux centos7 上 进行npm 命令是报错: Error: CERT_UNTRUSTED 解决办法: 关掉HTTPS就好了 npm config set strict-ssl ...
- IE6/IE7/IE8下float:right的异常及其解决方法
1.最简单的方法就是调换顺序,将需要右浮动的元素写在前面.写成这样:<h2><a href="#">更多>></a>小标题</ ...
- margin-left:10px; 不同浏览器距离为什么不一样?
这是一个ie的bug.. 如果你设置margin对象是浮动的.ie就会把你设置的值双倍处理..可以设置浮动对象的 display:inline 解决
- 怎么修改mysql主键(id)的值为自增
alter table tb_name modify id int auto_increment primary key
- Esper学习之九:EPL语法(五)
本篇的内容主要包括了Subquery(也就是子查询)和Join,内容不少,但是不难,基本上和sql差不太多. 1.Subquery EPL里的Subquery和sql的类似,是否比sql的用法更多我不 ...
- Linux账号和密码文件 /etc/passwd和/etc/shadow
Linux系统中,所有用户(包括系统管理员)的账号和密码都可以在/etc/passwd和/etc/shadow这两个文件中找到,(用户和密码就放在文件中,不怕被其他人看的或者修改吗?/etc/pass ...