What is flagged-respawn?
The flagged-respawn npm package is designed to facilitate the handling of specific flags in Node.js command-line applications. It allows developers to automatically respawn their node process with selected V8 flags or custom flags that are initially passed, making it easier to work with features or behaviors that require such flags to be enabled.
What are flagged-respawn's main functionalities?
Respawning with V8 flags
This feature allows the application to respawn with specified V8 flags if they are not already enabled. The code sample demonstrates how to use flagged-respawn to check for the '--harmony' flag and respawn the process with it if necessary.
const flaggedRespawn = require('flagged-respawn');
const v8Flags = ['--harmony'];
flaggedRespawn(v8Flags, process.argv, function (ready, child) {
if (ready) {
// your app code here
} else if (child) {
// this is the child process, do something with it if needed
}
});
Custom flag handling
This feature supports respawning the process with custom flags. The example shows how to ensure a process respawns with a '--custom-flag', allowing developers to implement custom behavior based on the presence of this flag.
const flaggedRespawn = require('flagged-respawn');
const customFlags = ['--custom-flag'];
flaggedRespawn(customFlags, process.argv, function (ready) {
if (ready) {
// your app code here, knowing that --custom-flag is being handled
}
});
Other packages similar to flagged-respawn
forever
Forever is a simple CLI tool for ensuring that a given script runs continuously (i.e., forever). It differs from flagged-respawn in that it focuses on keeping the script running rather than handling specific flags.
pm2
PM2 is a powerful, widely-used process manager for the Node.js ecosystem. It supports features like load balancing, monitoring, and logging. While it offers more comprehensive process management capabilities compared to flagged-respawn, it doesn't specifically target the handling and respawning of processes based on command-line flags.
nodemon
Nodemon is a utility that monitors for any changes in your source and automatically restarts your server. While it's primarily used for development purposes to restart the node application when file changes in the directory are detected, it doesn't specifically focus on respawning processes with certain flags like flagged-respawn does.
flagged-respawn
A tool for respawning node binaries when special flags are present.
What is it?
Say you wrote a command line tool that runs arbitrary javascript (e.g. task runner, test framework, etc). For the sake of discussion, let's pretend it's a testing harness you've named testify
.
Everything is going splendidly until one day you decide to test some code that relies on a feature behind a v8 flag in node (--harmony
, for example). Without much thought, you run testify --harmony spec tests.js
.
It doesn't work. After digging around for a bit, you realize this produces a process.argv
of:
['node', '/usr/local/bin/test', '--harmony', 'spec', 'tests.js']
Crap. The --harmony
flag is in the wrong place! It should be applied to the node command, not our binary. What we actually wanted was this:
['node', '--harmony', '/usr/local/bin/test', 'spec', 'tests.js']
Flagged-respawn fixes this problem and handles all the edge cases respawning creates, such as:
- Providing a method to determine if a respawn is needed.
- Piping stderr/stdout from the child into the parent.
- Making the parent process exit with the same code as the child.
- If the child is killed, making the parent exit with the same signal.
To see it in action, clone this repository and run npm install
/ npm run respawn
/ npm run nospawn
.
Sample Usage
#!/usr/bin/env node
const flaggedRespawn = require('flagged-respawn');
const v8flags = require('v8flags').fetch();
flaggedRespawn(v8flags, process.argv, function (ready, child) {
if (ready) {
console.log('Running!');
} else {
console.log('Special flags found, respawning.');
}
if (process.pid !== child.pid) {
console.log('Respawned to PID:', child.pid);
}
});
Release History
- 2016-03-22 - v0.3.2 - fix issue with v8 flags values being dropped
- 2014-09-12 - v0.3.1 - use
{ stdio: 'inherit' }
for spawn to maintain colors - 2014-09-11 - v0.3.0 - for real this time
- 2014-09-11 - v0.2.0 - cleanup
- 2014-09-04 - v0.1.1 - initial release