-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
src: add -r/--require flags for preloading modules
This patch adds a command line option (-r/--require) that allows one to provide modules on the command line that will be 'required' during node startup. This can be useful for debugging, tracing, memory leak analysis etc. to be preloaded without explicit changes to the user script. The option can be repeated to preload multiple modules. PR-URL: #881 Reviewed-By: Trevor Norris <trev.norris@gmail.com> Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com> Reviewed-By: Rod Vagg <rod@vagg.org>
- Loading branch information
Showing
7 changed files
with
194 additions
and
66 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log('A') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log('B') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log('C') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
var common = require('../common'), | ||
assert = require('assert'), | ||
path = require('path'), | ||
child_process = require('child_process'); | ||
|
||
var nodeBinary = process.argv[0]; | ||
|
||
var preloadOption = function(preloads) { | ||
var option = ''; | ||
preloads.forEach(function(preload, index) { | ||
// TODO: randomly pick -r or --require | ||
option += '-r ' + preload + ' '; | ||
}); | ||
return option; | ||
} | ||
|
||
var fixture = function(name) { | ||
return path.join(__dirname, '../fixtures/' + name); | ||
} | ||
|
||
var fixtureA = fixture('printA.js'); | ||
var fixtureB = fixture('printB.js'); | ||
var fixtureC = fixture('printC.js') | ||
var fixtureThrows = fixture('throws_error4.js'); | ||
|
||
// test preloading a single module works | ||
child_process.exec(nodeBinary + ' ' | ||
+ preloadOption([fixtureA]) + ' ' | ||
+ fixtureB, | ||
function(err, stdout, stderr) { | ||
if (err) throw err; | ||
assert.equal(stdout, 'A\nB\n'); | ||
}); | ||
|
||
// test preloading multiple modules works | ||
child_process.exec(nodeBinary + ' ' | ||
+ preloadOption([fixtureA, fixtureB]) + ' ' | ||
+ fixtureC, | ||
function(err, stdout, stderr) { | ||
if (err) throw err; | ||
assert.equal(stdout, 'A\nB\nC\n'); | ||
}); | ||
|
||
// test that preloading a throwing module aborts | ||
child_process.exec(nodeBinary + ' ' | ||
+ preloadOption([fixtureA, fixtureThrows]) + ' ' | ||
+ fixtureB, | ||
function(err, stdout, stderr) { | ||
if (err) { | ||
assert.equal(stdout, 'A\n'); | ||
} else { | ||
throw new Error('Preload should have failed'); | ||
} | ||
}); | ||
|
||
// test that preload can be used with --eval | ||
child_process.exec(nodeBinary + ' ' | ||
+ preloadOption([fixtureA]) | ||
+ '-e "console.log(\'hello\');"', | ||
function(err, stdout, stderr) { | ||
if (err) throw err; | ||
assert.equal(stdout, 'A\nhello\n'); | ||
}); | ||
|
||
// test that preload placement at other points in the cmdline | ||
// also test that duplicated preload only gets loaded once | ||
child_process.exec(nodeBinary + ' ' | ||
+ preloadOption([fixtureA]) | ||
+ '-e "console.log(\'hello\');" ' | ||
+ preloadOption([fixtureA, fixtureB]), | ||
function(err, stdout, stderr) { | ||
if (err) throw err; | ||
assert.equal(stdout, 'A\nB\nhello\n'); | ||
}); |