1.0.0 • Published 9 years ago
epipebomb v1.0.0
EPIPE Bomb
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
;(function log() {
console.log('tick')
process.nextTick(log)
})()Oh the humanity
$ 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
require('epipebomb')()
;(function log() {
console.log('tick')
process.nextTick(log)
})()Oh the joy!
$ node example.js | head
tick
tick
tick
tick
tick
tick
tick
tick
tick
tickCLI usage (Node 4.x and up)
Require epipebomb/register from the command line
node -r epipebomb/register some-script.js | heador use epipebomb as a drop-in replacement for node
epipebomb some-script.js | headNotes
Only the EPIPE error is captured on process.stdout - all other errors are thrown as per usual.