A tool for respawning node binaries when special flags are present.
What is it?
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
['node', '/usr/local/bin/test', '--harmony', 'spec', 'tests.js']
--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.
#!/usr/bin/env nodeconst flaggedRespawn = ;// get a list of all possible v8 flags for the running version of nodeconst v8flags = ;;
flaggedRespawn(flags, argv, [ forcedFlags, ] callback) : Void
Respawns the script itself when argv has special flag contained in flags and/or forcedFlags is not empty. Because members of flags and forcedFlags are passed to
node command, each of them needs to be a node flag or a V8 flag.
--no-respawning flag is given in argv, this function does not respawned even if argv contains members of flags or forcedFlags is not empty. (This flag is also used internally to prevent from respawning more than once).
|flags||Array||An array of node flags and V8 flags which are available when present in argv.|
|argv||Array||Command line arguments to respawn.|
|forcedFlags||Array or String||An array of node flags or a string of a single flag and V8 flags for respawning forcely.|
|callback||function||A called function when not respawning or after respawned.|
callback(ready, proc, argv) : Void
callback function is called both when respawned or not, and it can be distinguished by callback's argument: ready. (ready indicates whether a process spawned its child process (false) or not (true), but it does not indicate whether a process is a spawned child process or not. ready for a spawned child process is true.)
argv is an array of command line arguments which is respawned (when ready is false) or is passed current process except flags within flags and
--no-respawning(when ready is true).
Parameter Type Description ready boolean True, if not respawning and is ready to execute main function. proc object Child process object if respawned, otherwise current process object. argv Array An array of command line arguments.