`
dcj3sjt126com
  • 浏览: 1825512 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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启动模板

    Gulp启动模板 入门模板,包括我在一个项目中汇集在一起​​的不同人员的工作 ... 代表管理员打开Powershell并输入Set-ExecutionPolicy RemoteSigned以便将来不会出现与缺少某些权限相关的错误 在控制台中运行命令npm in

    gulp-build:Gulp启动模板

    代表管理员打开Powershell并输入Set-ExecutionPolicy RemoteSigned以便将来不会出现与缺少某些权限相关的错误 在控制台中运行命令npm install gulp-cli -g 。 此命令将全局安装Gulp,也就是说,您可以从计算机上的...

    sbt-play-gulp:Play框架的Gulp资产管道

    进行了升级,已从Sonatype移至Bintray v0.1.5修复了Windows上的gulp.js解析错误。 v0.1.3重新设计了devAssetHandler,使其不再返回Content-Disposition标头。 对于@jeantil的请求 , 表示敬意。 添加了命令。 (您...

    gulpRails:使用 Gulp 增强 Rails 管道

    胜利开始使用 bower 进行依赖管理CoffeScript linting 和错误捕获Sass 错误捕获开始使用 Browserify ( export 和 require ) 仍然可以将 gems 用于依赖项您可以修改构建过程以满足您的需求有些项目对编译有特殊要求,...

    sage-starter:具有现代前端开发工作流程的最佳入门主题。 基于Sage,HTML5 Boilerplate,gulp,Bower和Bootstrap

    构建脚本,可同时编译Sass和Less,检查JavaScript错误,优化图像,并连接和缩小文件 用于在测试过程中保持多个浏览器和设备同步,并在开发过程中将更新CSS和JS注入浏览器 用于前端程序包管理 基于JSON文件的资产管道...

    node-sass-patch:节点 v0.11.13 和 v0.11.14 的 Gulp sass 依赖 node-sass 包模块补丁

    错误如下所示: /node_modules/gulp-sass/node_modules/node-sass/lib/index.js:21 throw new Error('`libsass` bindings not found. Try reinstalling `node-sass ^修补Node-sass 包含预编译的二进制文件。 该补丁...

    Vestri:使用 Mongoose AMQP Redis 的 Bootstrap 项目

    要运行,请运行make gulp ,它运行gulp watch但会在循环中运行它以防发生通常会导致 gulp 崩溃的错误(在这种情况下,它只是重新启动 gulp,因此您不必每次都手动重新启动 gulp出现语法错误) Webpack

    CordovaBowerGulp-Template:Visual Studio 2015的Cordova项目模板,将Bower和Gulp与基本配置集成在一起

    适用于JavaScript包管理的Bower 建立步骤 AngularJS for SPA框架 林亭 包括配置了一些基本规则的ESLint。 ESLint设置为与watch任务一起运行。 它仅监视app文件夹中JavaScript文件。 路线图 解决VS2015中的一个未...

    personal-heating-manager:带有树莓派的个人供暖管理系统

    先决条件安装 Bower 包管理器: $ npm install -g bower安装 Gulp 任务管理器: $ npm install gulp -g启动并运行 $ npm install$ npm startRaspberry Pi 上的 Node.js 和 MongoDB 以下是我用来在 RaspberryPi B+ 上...

    closure-compiler-npm:用于管理和记录闭包编译器的软件包,可通过npm使用

    与插件本身无关的任何错误都应报告给。配套该编译器分布在多个平台上。 每个平台都是其自己的npm软件包。主包装google-closure-compiler软件包包含Grunt和Gulp插件以及一个CLI: 其他套餐裸露的发行版面向希望在...

    midi:Dfinder文件系统

    if 根据条件控制文件流 - gulp-print 打印管道中的文件流gulp-jshint Javascript代码验证工具(改进意见)jshint-stylish jshint输出样式配置gulp-plumber 防止gulp管道破裂...(文件流错误处理)gulp-filter 文件流过滤...

    redirection:管理您所有的WordPress 301重定向并监控404错误

    重新导向PHP / JavaScript 重定向是一个WordPress插件,用于管理301重定向,跟踪404错误,并且通常会整理您的网站可能存在的任何松散结局。 如果您要从旧网站迁移页面或更改WordPress安装目录,则此功能特别有用。 ...

    File-Browser:使用Node和VueJS构建的文件浏览器和管理器

    使用Node和VueJS构建的文件浏览器和管理器。 用Exiftool提取的Medatata。 仅在Mac OS X上测试。 ##安装 克隆或下载此存储库 $ npm安装 $ CD应用程序 $节点服务器 如果出现错误,可能需要运行$ sudo节点服务器 ...

    react-django-admin:React JS中的管理界面,使用Django的Rest框架作为后端

    即将出现许多错误修正 前端 要安装项目: ```sh $ npm install ``` 为了开发,自动构建资源: ```sh $ gulp watch ``` 编辑配置: The config is in `./js/config.js`; Copy the `./js/config.js.example` file, ...

    front-end-template:基于 Sage 主题工作流程和 HTML5BP 的前端模板

    构建脚本,可以编译 Less 和 Sass,检查 JavaScript 错误,优化图像,并连接和缩小文件 用于在测试时保持多个浏览器和设备同步,并在开发时将更新的 CSS 和 JS 注入浏览器 用于前端包管理 基于 JSON 文件的资产管道...

    cards:软件开发冲刺的任务管理

    牌软件开发冲刺的任务管理。入门安装工具和依赖项安装 npm install构建应用程序从项目根目录运行npm run build 。 该应用程序将被编译到dist目录中。使用 LiveReload 进行开发从项目根目录运行npm run live ,然后...

    VictoriaVasys.github.io:我的网页

    入门要使用此模板,请选择以下选项之一以开始使用: 在 Start Bootstrap 上下载最新版本在 GitHub 上 fork 这个仓库错误和问题此模板有错误或问题? 在 GitHub 上或的发表评论。创造者Start Bootstrap由管理合伙人...

    staggulpjs:StagGulpJS构建器

    特征构建脚本,检查JavaScript错误,优化图像,并连接和缩小文件用于前端程序包管理基于JSON文件的资产管道的安装克隆git repo- git clone https://github.com/staglabel/staggulpjs.git ,然后将目录重命名为主题或...

    meduz-gulpfile:我的个人 Gulpfile

    缓存管理(仍然不知道它是如何工作的,但确实如此) Gulp 不会因为错误而停止(感谢 Plumber) 图形用户界面通知文件结构包.json gulpfile.js 开发字体图片js scss 声音文档css 样式文件字体图片js projectSlug.js...

    基于Node.Js的Markdown博客系统Liblog.zip

    【后台管理】后台主题设置优化,修复设置错误后台打不开的bug 【个人中心】修复个性签名设置bug,积分算法bug修复-forlong401 【后台管理】添加社区标签管理功能-forlong401 【后台管理】添加后台文章标签排序功能...

Global site tag (gtag.js) - Google Analytics