npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

outpipe

v1.1.1

Published

write output to a file through shell commands

Downloads

2,355,440

Readme

outpipe

write output to a file through shell commands

purpose

Suppose you have a tool like watchify or factor-bundle that write to multiple files or write to the same file more than once.

If you want to pipe the output of these tools to other programs, such as minification with the uglify command, it's very difficult! You might need to use the tool's API or use a separate command to watch for changes to the output files. Ick.

You don't get the elegance of something like:

$ browserify main.js | uglifyjs -cm | gzip > bundle.js.gz

Until now! With this library and a hypothetical version of watchify, you could do:

$ watchify main.js -dv -o 'uglifyjs -cm | gzip > bundle.js.gz'

example

Here's a small watcher program that will just copy input files to a destination, but transforms can be applied along the way with shell pipes and redirects.

var outpipe = require('outpipe');
var gaze = require('gaze');
var fs = require('fs');

var minimist = require('minimist');
var argv = minimist(process.argv.slice(2), {
    alias: { o: 'output' }
});

var file = argv._[0];
gaze(file, function (err, w) {
    w.on('changed', read);
});
read();

function read () {
    var r = fs.createReadStream(file);
    r.pipe(outpipe(argv.output));
}

We can run the program with a single output file:

$ node watch.js input/x.js -o output/hmm.js

which just copies x.js to output/hmm.js whenever x.js changes.

We could also run a minification step using the uglify command:

$ node watch.js input/x.js -o 'uglifyjs -cm > output/wow.js'

or we can just print the size of the minified and gzipped output to stdout:

$ node watch.js input/x.js -o 'uglifyjs -cm | gzip | wc -c'
123

or we could write that size to a file:

$ node watch.js input/x.js -o 'uglifyjs -cm | gzip | wc -c > size.txt'

methods

var outpipe = require('outpipe')

var w = outpipe(cmd, opts={})

Return a writable stream w that will pipe output to the command string cmd.

If cmd has no operators (| or >), it will write to a file.

Otherwise, each command between pipes will be executed and output is written to a file if > is given.

opts can be:

  • opts.env - an object mapping environment variables to their values or a function (key) {} that returns the values.

stdout and stderr are forwarded to process.stdout and process.stderr if unhandled in the command.

install

With npm do:

npm install outpipe

license

MIT