mirror of https://github.com/lukechilds/node.git
Browse Source
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: https://github.com/iojs/io.js/pull/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>v1.8.0-commit
Ali Ijaz Sheikh
10 years ago
committed by
Rod Vagg
7 changed files with 194 additions and 66 deletions
@ -0,0 +1 @@ |
|||
console.log('A') |
@ -0,0 +1 @@ |
|||
console.log('B') |
@ -0,0 +1 @@ |
|||
console.log('C') |
@ -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'); |
|||
}); |
Loading…
Reference in new issue