1. outpipe
write output to a file through shell commands
outpipe
Package: outpipe
Created by: substack
Last modified: Tue, 08 Nov 2022 10:40:24 GMT
Version: 1.1.1
License: MIT
Downloads: 2,299,958
Repository: https://github.com/substack/outpipe

Install

npm install outpipe
yarn add outpipe

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

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code