Skip to content

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

License

Notifications You must be signed in to change notification settings

mhart/epipebomb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

;(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
tick

CLI usage (Node 4.x and up)

Require epipebomb/register from the command line

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

or use epipebomb as a drop-in replacement for node

epipebomb some-script.js | head

Notes

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

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published