scope Node requires to baseURL rooting

This commit is contained in:
guybedford 2016-07-06 20:43:25 +02:00
parent 59443712f4
commit 2fbfed417a

View File

@ -90,14 +90,15 @@ if (typeof require != 'undefined' && typeof process != 'undefined' && !process.b
*/
var parentModuleContext;
function getNodeModule(name) {
function getNodeModule(name, baseURL) {
if (!isPlain(name))
throw new Error('Node module ' + name + ' can\'t be loaded as it is not a package require.');
if (!parentModuleContext) {
var Module = this._nodeRequire('module');
parentModuleContext = new Module(process.cwd());
parentModuleContext.paths = Module._nodeModulePaths(process.cwd());
var base = baseURL.substr(isWindows ? 8 : 7);
parentModuleContext = new Module(base);
parentModuleContext.paths = Module._nodeModulePaths(base);
}
return parentModuleContext.require(name);
}
@ -127,7 +128,7 @@ function coreResolve(name, parentName) {
if (name.substr(0, 6) == '@node/') {
if (!this._nodeRequire)
throw new TypeError('Error loading ' + name + '. Can only load node core modules in Node.');
this.set(name, this.newModule(getESModule(getNodeModule.call(this, name.substr(6)))));
this.set(name, this.newModule(getESModule(getNodeModule.call(this, name.substr(6), this.baseURL))));
return name;
}