diff --git a/lib/module.js b/lib/module.js index 65e44b60b1..844b683940 100644 --- a/lib/module.js +++ b/lib/module.js @@ -503,6 +503,20 @@ Module.requireRepl = function() { 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(); // backwards compatibility diff --git a/src/node.js b/src/node.js index 4521afbf0c..25164784cf 100644 --- a/src/node.js +++ b/src/node.js @@ -839,10 +839,7 @@ // Load preload modules startup.preloadModules = function() { if (process._preload_modules) { - var Module = NativeModule.require('module'); - process._preload_modules.forEach(function(module) { - Module._load(module); - }); + NativeModule.require('module')._preloadModules(process._preload_modules); } }; diff --git a/test/fixtures/cluster-preload.js b/test/fixtures/cluster-preload.js index 651fc480e8..3063e5b779 100644 --- a/test/fixtures/cluster-preload.js +++ b/test/fixtures/cluster-preload.js @@ -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'); cluster.isMaster || process.exit(42 + cluster.worker.id); // +42 to distinguish // from exit(1) for other random reasons