src: fix module search path for preload modules
When the preload module is not a abs/relative path, we should use the standard search mechanism of looking into the node_modules folders outwards. The current working directory is deemed to be the 'requiring module', i.e. parent. The search path starts from cwd outwards. Fixes: https://github.com/nodejs/io.js/issues/1803 PR-URL: https://github.com/nodejs/io.js/pull/1812 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
parent
53e98cc1b4
commit
5759722cfa
@ -503,6 +503,20 @@ Module.requireRepl = function() {
|
|||||||
return Module._load('internal/repl', '.');
|
return Module._load('internal/repl', '.');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Module._preloadModules = function(requests) {
|
||||||
|
if (!Array.isArray(requests))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Preloaded modules have a dummy parent module which is deemed to exist
|
||||||
|
// in the current working directory. This seeds the search path for
|
||||||
|
// preloaded modules.
|
||||||
|
var parent = new Module('internal/preload', null);
|
||||||
|
parent.paths = Module._nodeModulePaths(process.cwd());
|
||||||
|
requests.forEach(function(request) {
|
||||||
|
Module._load(request, parent, false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Module._initPaths();
|
Module._initPaths();
|
||||||
|
|
||||||
// backwards compatibility
|
// backwards compatibility
|
||||||
|
@ -839,10 +839,7 @@
|
|||||||
// Load preload modules
|
// Load preload modules
|
||||||
startup.preloadModules = function() {
|
startup.preloadModules = function() {
|
||||||
if (process._preload_modules) {
|
if (process._preload_modules) {
|
||||||
var Module = NativeModule.require('module');
|
NativeModule.require('module')._preloadModules(process._preload_modules);
|
||||||
process._preload_modules.forEach(function(module) {
|
|
||||||
Module._load(module);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
9
test/fixtures/cluster-preload.js
vendored
9
test/fixtures/cluster-preload.js
vendored
@ -1,3 +1,12 @@
|
|||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
// https://github.com/nodejs/io.js/issues/1803
|
||||||
|
// this module is used as a preload module. It should have a parent with the
|
||||||
|
// module search paths initialized from the current working directory
|
||||||
|
assert.ok(module.parent);
|
||||||
|
var expectedPaths = require('module')._nodeModulePaths(process.cwd());
|
||||||
|
assert.deepEqual(module.parent.paths, expectedPaths);
|
||||||
|
|
||||||
var cluster = require('cluster');
|
var cluster = require('cluster');
|
||||||
cluster.isMaster || process.exit(42 + cluster.worker.id); // +42 to distinguish
|
cluster.isMaster || process.exit(42 + cluster.worker.id); // +42 to distinguish
|
||||||
// from exit(1) for other random reasons
|
// from exit(1) for other random reasons
|
||||||
|
Loading…
x
Reference in New Issue
Block a user