mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
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>
75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
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');
|
|
});
|