`
dcj3sjt126com
  • 浏览: 1868246 次
  • 性别: 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概述 Gulp 是一个基于 Node.js 的自动化...以上就是 Gulp 的基本使用方法及相关插件的介绍,通过这些基础知识的学习,可以帮助开发者更好地进行前端资源的管理和构建,提高开发效率。

    gulp的基础操作详解

    其中,`gulp` 是一个非常流行的选择,它基于强大的 JavaScript 运行环境 `Node.js`,为开发者提供了一种高效、灵活的方式来管理项目构建流程。本文将深入探讨 `gulp` 的基础操作,帮助你快速上手并掌握这一利器。 1...

    基于layui框架使用gulp工具搭建的后台模板

    6. **资源版本管理**:每次构建时为资源文件生成新的哈希值,确保更新的文件能够正确缓存,避免客户端因缓存问题导致的加载错误。 在实际项目中,你需要先安装gulp及相关插件,然后配置gulpfile.js,定义上述任务。...

    基于gulp打包的vue单页

    开发者可能会学习如何通过Gulp实现热更新、错误处理和代码质量检查。 综上所述,这个项目涉及到了Vue.js的基础和进阶应用,以及使用Gulp进行前端构建的相关技术。通过学习和实践这个项目,开发者可以提升在Vue.js和...

    gulp项目配置文件

    使用`gulp.series`或`gulp.parallel`来管理这种关系。 ```javascript // 同步执行styles和scripts const build = gulp.series('styles', 'scripts'); // 或者并行执行 const build = gulp.parallel('styles', '...

    gulp项目基础demo,构建属于你的项目

    10. **错误处理**: 使用`gulp-plumber`捕获在流中发生的错误,防止整个构建过程因单个错误而中断。 通过这个`gulp项目基础demo`,你不仅可以了解如何设置和运行`gulp`任务,还能学习到如何利用插件来优化和管理你的...

    gulp-sass.rar

    在使用gulp-sass时,首先确保已经安装了Node.js和npm(Node包管理器)。然后,通过npm全局或局部安装gulp和gulp-sass。局部安装通常更符合最佳实践,因为它避免了不同项目之间的依赖冲突。安装命令如下: ```bash ...

    前端开源库-gulp-expect-file

    5. **处理错误**:当`gulp-expect-file`检测到预期文件缺失时,它会抛出一个错误,你可以捕获这个错误并自定义错误处理方式,例如打印更详细的错误信息或者发送通知。 总的来说,`gulp-expect-file`是前端开发中...

    前端开源库-gulp-component-helper

    3. **依赖管理**:`gulp-component-helper` 可能会整合Gulp插件来管理组件之间的依赖关系,确保在构建过程中正确处理组件间的依赖顺序。 4. **版本控制**:为了保证组件的一致性和可维护性,此库可能包含了版本控制...

    使用gulp解决requireJs项目前端缓存问题

    在JavaScript开发过程中,尤其是涉及到大型应用时,前端的模块化管理变得至关重要。RequireJS作为一款优秀的AMD(Asynchronous Module Definition)规范实现者,允许我们按需加载和组织代码,但随之而来的问题是,当...

    前端开源库-gulp-qunit-harness

    Gulp 是一个基于Node.js的任务管理工具,使用流(stream)模型处理文件,提高了构建速度。开发者可以定义一系列任务,如CSS预处理、图片优化、源码混淆等,并在项目构建过程中按需调用。`gulp-qunit-harness` 是一...

    gulp4.0自动构建参考工程-带完整依赖包.rar

    `gulp4.0自动构建参考工程-带完整依赖包.rar` 是一个针对前端开发的项目模板,利用了流行的自动化工具Gulp 4.0进行构建流程的管理和优化。Gulp是一个基于任务的构建系统,它允许开发者通过编写简单的JavaScript任务...

    前端开源库-gulp-run-sequence

    在没有 run-sequence 的情况下,Gulp 默认会并行执行所有任务,这可能导致错误的结果。 安装 `run-sequence`: ```bash npm install --save-dev run-sequence ``` 然后在 Gulpfile.js 中引入并使用它: ```...

    前端开源库-gulp-download

    5. **错误处理**:如果在下载过程中发生错误,`gulp-download`会抛出异常,帮助开发者快速定位问题。 6. **批处理下载**:可以一次性下载多个文件,极大地提高了批量处理资源的效率。 7. **可配置性**:通过配置...

    基于nodejs和gulp搭建的前端自动化流程工具

    Node.js是JavaScript运行环境,而Gulp则是一个强大的任务管理器,两者结合使得前端构建过程变得更加便捷。 JavaScript开发中的打包工具,如fetool,通常包括以下核心功能: 1. **源代码管理和合并**:fetool可以将...

    前端开源库-gulp-ng-constant

    **gulp-ng-constant** 是一个前端开发中常用...总之,`gulp-ng-constant`是一个强大的工具,它简化了AngularJS应用中常量的管理,增强了开发效率,并且提供了灵活的环境配置支持,是前端开发中值得采用的一个实用插件。

    JGulp, 利用Gulp 配置的个人前端项目自动化工作流.zip

    Gulp是现代Web开发中的一个强大工具,它提供了一种简洁的方式来管理和自动化复杂的项目构建过程。通过使用Gulp,开发者可以极大地提高工作效率,减少手动操作,确保代码质量和一致性。 在JGulp中,我们可能会遇到...

    由electornvuewebpack和gulp搭建的跨平台桌面程序脚手架

    4. **Gulp**:Gulp是一个自动化任务管理工具,开发者可以通过编写Gulp任务来自动化常见的构建流程,比如编译Sass、压缩图片、合并JS文件等。在本项目中,Gulp可能被用于设置构建流程,如预处理CSS、执行单元测试、...

    Node.js-可以进行完整文件操作同步增加删除更新的Gulp插件

    Gulp作为一个流式构建系统,通过定义任务来编译、优化和管理项目资源,而Gulp插件则进一步扩展了其功能。 描述中提到的“完整文件操作同步”,意味着这个Gulp插件不仅支持基本的文件操作,还能够同步执行这些操作,...

    精通gulp常用插件

    Gulp-eslint插件可以检查JavaScript代码的风格和潜在错误,帮助你保持代码整洁和一致。 12. **Gulp-browserify**: 如果你的项目使用了CommonJS模块化,但需要在浏览器中运行,Gulp-browserify可以帮助你将这些模块...

Global site tag (gtag.js) - Google Analytics