Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mhart/epipebomb

Ignore EPIPE errors when stdout runs through a truncated pipe (such as `head`) in Node.js
https://github.com/mhart/epipebomb

Last synced: 6 days ago
JSON representation

Ignore EPIPE errors when stdout runs through a truncated pipe (such as `head`) in Node.js

Awesome Lists containing this project

README

        

# EPIPE Bomb

npm install epipebomb

By default, node throws `EPIPE` errors if `process.stdout` is being written to and
a user runs it through a pipe that gets closed while the process is still outputting
(eg, the simple case of piping a node app through `head`).

This seemed a little overzealous to me, so I wrote this to suppress such errors.

## Before

#### example.js
```javascript
;(function log() {
console.log('tick')
process.nextTick(log)
})()
```

#### Oh the humanity

```shell
$ node example.js | head
tick
tick
tick
tick
tick
tick
tick
tick
tick
tick

events.js:66
throw arguments[1]; // Unhandled 'error' event
^
Error: write EPIPE
at errnoException (net.js:782:11)
at Object.afterWrite (net.js:600:19)
```

## After

#### example.js
```javascript
require('epipebomb')()

;(function log() {
console.log('tick')
process.nextTick(log)
})()
```

#### Oh the joy!
```shell
$ node example.js | head
tick
tick
tick
tick
tick
tick
tick
tick
tick
tick
```

## CLI usage (Node 4.x and up)

Require `epipebomb/register` from the command line

```shell
node -r epipebomb/register some-script.js | head
```

or use `epipebomb` as a drop-in replacement for `node`

```shell
epipebomb some-script.js | head
```

## Notes

Only the `EPIPE` error is captured on `process.stdout` - all other errors are thrown as per usual.