-
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
-r/--require can be used to preload modules on node startup. The option takes a single module name. The option can be repeated as necessary to preload multiple modules. This patch allows 'vendors' (such a cloud host) to inject functionality that gets executed at application startup without requiring an explicit require from the user's application. This can be useful to load vendor specific application monitoring APIs transparently. PR-URL: #881 Reviewed-By: Trevor Norris <[email protected]> Reviewed-By: Chris Dickinson <[email protected]>
- Loading branch information
1 parent
53e200a
commit 7bde3f1
Showing
7 changed files
with
194 additions
and
65 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,75 @@ | ||
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'); | ||
}); | ||
|