pump = require('pump')

pump简介

https://github.com/terinjokes/gulp-uglify/blob/master/docs/why-use-pump/README.md#why-use-pump

当使用来自Node.js的管道时,错误不会通过管道流向前传播,如果目标流关闭,源流也不会关闭。pump模块将这些问题规范化,并在回调中传递错误。

pump可以使我们更容易找到代码出错位置。

A common gulpfile example

A common pattern in gulp files is to simply return a Node.js stream, and expect the gulp tool to handle errors.

gulp文件中的一个常见模式是简单地返回一个Node.js流,并期待gulp工具能处理错误

// example of a common gulpfile
var gulp = require('gulp');
var uglify = require('gulp-uglify'); gulp.task('compress', function () {
// returns a Node.js stream, but no handling of error messages
return gulp.src('lib/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist'));
});

There’s an error in one of the JavaScript files, but that error message is the opposite of helpful. You want to know what file and line contains the error. So what is this mess?

这里有一个错误在某个JavaScript文件中,但是这些错误信息并没有起到什么作用。我们真正想要知道的是哪个文件的哪一行出现了这些错误。

When there’s an error in a stream, the Node.js stream fire the 'error' event, but if there’s no handler for this event, it instead goes to the defined uncaught exception handler. The default behavior of the uncaught exception handler is documented:

当在流中出现了错误时,将会触发'error'事件,但是如果这里的事件没有handler的话,它将会定义一个没有捕捉的异常handler,如下文档说明:

By default, Node.js handles such exceptions by printing the stack trace to stderr and exiting.默认情况下,Node.js通过将堆栈跟踪打印到stderr和退出来处理这些异常

Handling the Errors

Since allowing the errors to make it to the uncaught exception handler isn’t useful, we should handle the exceptions properly. Let’s give that a quick shot.

即然如果不处理异常将默认为uncaught exception handler(这是没有用的),那么我们就应该恰当地对异常进行处理

var gulp = require('gulp');
var uglify = require('gulp-uglify'); gulp.task('compress', function () {
return gulp.src('lib/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist'))
.on('error', function(err) { //添加一个异常处理
console.error('Error in compress task', err.toString());
});
});

Unfortunately, Node.js stream’s pipe function doesn’t forward errors through the chain, so this error handler only handles the errors given by gulp.dest. Instead we need to handle errors for each stream.

但是这个异常处理是不会通过链来传递错误的,所以它只会处理来自 gulp.dest的错误。那么如果我们要处理每一个流的错误的话,就要像下面一样,每个流都进行错误处理

var gulp = require('gulp');
var uglify = require('gulp-uglify'); gulp.task('compress', function () {
function createErrorHandler(name) {
return function (err) {
console.error('Error from ' + name + ' in compress task', err.toString());
};
} return gulp.src('lib/*.js')
.on('error', createErrorHandler('gulp.src'))
.pipe(uglify())
.on('error', createErrorHandler('uglify'))
.pipe(gulp.dest('dist'))
.on('error', createErrorHandler('gulp.dest'));
});

This is a lot of complexity to add in each of your gulp tasks, and it’s easy to forget to do it. In addition, it’s still not perfect, as it doesn’t properly signal to gulp’s task system that the task has failed. We can fix this, and we can handle the other pesky issues with error propogations with streams, but it’s even more work!

这样就会变得很复杂,而且你也很容易就忘记这么做。所以我们需要使用pump

Using pump

The pump module is a cheat code of sorts. It’s a wrapper around the pipe functionality that handles these cases for you, so you can stop hacking on your gulpfiles, and get back to hacking new features into your app.

它是用来处理上面这些情况的pipe的包装器,这样您就可以停止对您的gulpfile文件进行黑客攻击,并重新对您的应用程序进行黑客攻击

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var pump = require('pump'); gulp.task('compress', function (cb) {
pump([
gulp.src('lib/*.js'),
uglify(),
gulp.dest('dist')
],
cb //回调函数
);
});

The gulp task system provides a gulp task with a callback, which can signal successful task completion (being called with no arguments), or a task failure (being called with an Error argument). Fortunately, this is the exact same format pump uses!

Now it’s very clear what plugin the error was from, what the error actually was, and from what file and line number.

这样我们就能够看见是什么触发了error,在哪个文件的哪一行

这只是一个简单的了解,如果想要更深入的学习请自学https://github.com/pump-io/pump.io

之后如果看了这部分再写出来

pump模块的学习-metamask的更多相关文章

  1. python模块的学习

    # time 模块 import time print(time.time()) #当前的时间挫 #time.sleep(3) #休息3秒钟,这3秒cpu不工作的 print(time.gmtime( ...

  2. requsets模块的学习

    requests模块的学习 使用之前 pip install requests 发起get,post,请求获取响应 response = requests.get(url,headers) # 发起g ...

  3. Spark的Rpct模块的学习

    Spark的Rpct模块的学习 Spark的Rpc模块是1.x重构出来可,以前的代码中大量使用了akka的类,为了把akka从项目的依赖中移除,所有添加了该模块.先看下该模块的几个主要的类   使用E ...

  4. retrying模块的学习

    retrying模块的学习 我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过try块去进行重试,但是每次都写那么一堆try块,真的是太麻烦,所以今天就来说一个比较pythonic的 ...

  5. AngularJs HTML DOM、AngularJS 事件以及模块的学习(5)

    今天的基础就到了操作DOM,事件和模块的学习,其实我个人感觉学习起来AngularJS并没有想象中的那么的艰难,可能是因为这个太基础化吧,但是我们从初学开始就应该更加的自信一些,后来我可能会写一个小的 ...

  6. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  7. Python模块——loguru日志模块简单学习

    Python loguru模块简单学习 首先安装模块:pip install logoru,然后引入模块: from loguru import logger 1.直接输出到console logge ...

  8. Request模块入门学习

    使用指令npm install --save request来安装模块,然后使用var request = require('request')完成引用. 对于GET请求,主要是获取目的url中数据. ...

  9. gulp学习-metamask前端使用

    https://www.gulpjs.com.cn/docs/getting-started/ ,这个是3.9.0版本 后面发现安装的版本是4.0.0,看下面这个: https://github.co ...

随机推荐

  1. c# DataSet转换为Json

    /// <summary> /// DataSet转换为Json /// </summary> /// <param name="dataSet"&g ...

  2. 探秘小程序(10):分享功能+webview

    场景: 小程序页面用webview嵌入了h5页面,h5页面需要与小程序进行交互,h5页面内容不同,分享的链接也不一样 分享功能: 小程序的分享功能即用户点击小程序右上角,转发功能页面.可以指定分享卡片 ...

  3. X问题(中国剩余定理+不互质版应用)hdu1573

    X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. Linux将未挂载的磁盘挂载到目录

     1.找的未挂载磁盘fdisk -l2.格式化mkfs -t ext4 /dev/xvdc3.挂载目录mount /dev/xvdc /data4.开机启动vi /etc/fstab/dev/xvdc ...

  5. Flask wtforms实现简单的登录注册

    目录结构 视图 # -*- coding:utf-8 -*- # Author : Niuli # Data : 2019-02-27 19:26 from flask import render_t ...

  6. 创建一个背景为蓝色的pygame窗口

    import sys import pygame def creat_screen(): #初始化pygame pygame.init() #设置窗口大小并保存在screen对象中 screen = ...

  7. 【读书笔记】iOS-处理内存警告

    -(void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; } 在这里你需要释放掉所有占用了很大内存的对象,如果你忽略了这个警告, ...

  8. Android开发专业名词及工具概述

    前言: 系统的学习下Android开发中涉及到的一些专业名词 和Android开发工具 名词: 一.SDK(Software Development Kit) 软件开发工具包:一般都是一些软件工程师为 ...

  9. Kotlin入门(17)等式判断的情况

    话说等式可是编程语言最基本的表达式之一,不管哪种高级语言,无一例外都采用双等号“==”判断两个变量是否相等:就算是复杂的对象,在Java中也可通过equals函数判断两个实例是否相等.按理说这些能够满 ...

  10. 使用spark DStream的foreachRDD时要注意哪些坑?

    答案: 两个坑, 性能坑和线程坑 DStream是抽象类,它把连续的数据流拆成很多的小RDD数据块, 这叫做“微批次”, spark的流式处理, 都是“微批次处理”. DStream内部实现上有批次处 ...