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

extra-child-process

v1.1.19

Published

Useful additions to inbuilt child_process module.

Downloads

118

Readme

Useful additions to inbuilt child_process module. 📦 Node.js, 📜 Files, 📰 Docs.

Have you heard of bash or command prompt? These programs are called shells. They watch what you type, and treat it as requests to run particular programs. Programs themselves are just names on the file system, and the shell searches them in a particular manner (controlled with environment variables such as PATH). Our programs as based on UNIX principles, where each program can accept an initial input through arguments, runtime input through stdin input stream #0, and provide its runtime output into stdout output stream #1 (along with stderr output stream #2 for errors). The output of a program can be fed into another program through piping |, allowing us to set up a pipline of programs to achieve a complex operation (without having to write a new program).

child_process is an inbuilt Node.js module that enables us to execute specific programs directly (execFile), or through the shell (exec). Executing programs through the shell is hyper convenient as we are allowed to use its inbuilt commands and features such as piping of streams, but is does come with a security risk (such as command injection) when using unsanitized user input to generate the sequence of instructions to be executed on the shell. When possible, execting specific programs directly using execFile would be a suitable approach. spawn can be used when we want to start a new process and control its input and output streams. exec and execFile are implemented on top of spawn. fork is a special case of spawn, used specifically to launch new Node.js processes.

This package provides async versions of functions (in additon to the existing sync and callback-based functions), which are not included with the inbuilt child_process module. They are named as *Async can be used with Promise-based asynchronous programming using the await keyword. spawnAsync is a special case here, which returns a PromiseWithChild which is essentially a Promise with a .child property to allow ChildProcess to be directly accessed similar to spawn. In addition, callback-based functions, such as exec, also behave as async functions when a callback is not provided. Functions for locating path of executable(s) such as which and whichAll are also included. Design was based on local ideas and literature survey.

Stability: Experimental.

const xcp = require('extra-child-process');


// 1. List files in current directory.
async function example1() {
  var {stdout, stderr} = await xcp.exec('ls -a');
  var {stdout, stderr} = await xcp.execFile('ls', ['-a']);
  xcp.exec('ls -a', (err, stdout, stderr) => 0);
  xcp.execFile('ls', ['-a'], (err, stdout, stderr) => 0);
  // → .
  // → ..
  // → .build
  // → .git
  // → .github
  // → ...
}
example1();


// 2. List files in 'src' directory.
async function example2() {
  var {stdout, stderr} = await xcp.exec('ls -a', {cwd: 'src'});
  var {stdout, stderr} = await xcp.execFile('ls', ['-a'], {cwd: 'src'});
  xcp.exec('ls -a', {cwd: 'src'}, (err, stdout, stderr) => 0);
  xcp.execFile('ls', ['-a'], {cwd: 'src'}, (err, stdout, stderr) => 0);
  // → .
  // → ..
  // → index.ts
}
example2();


// 3. Locate path of node executable.
async function example3() {
  var paths = process.env.PATH.split(';');
  var exec  = await xcp.which('node');
  var exec  = await xcp.which('node', {paths});
  // → 'D:\\Program Files\\nodejs\\node.exe'
}
example3();


// 4. Locate path of n*e executables.
async function example4() {
  var paths = process.env.PATH.split(';');
  var execs = await xcp.whichAll(/^n.*?e$/);
  var execs = await xcp.whichAll(/^n.*?e$/, {paths});
  // → [
  // →   'D:\\Program Files\\Git\\usr\\bin\\nice.exe',
  // →   'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.2\\bin\\nvprune.exe',
  // →   'D:\\Program Files\\nodejs\\node.exe'
  // → ]
}
example4();

Index

| Property | Description | | ---- | ---- | | exec | Execute a command within a shell, buffering any output. | | execFile | Execute an executable without a shell by default, buffering any output. | | fork | This method is a special case of spawn used specifically to spawn new Node.js processes. | | spawn | This method spawns a new process using the given command and args. | | spawnAsync | Spawn new process using given command and arguments. | | which | Locate path of executable for given command. | | whichAll | Locate paths of all matching executables for given command. |

References

ORG DOI