From 6443c8829ffe3397d8b7dfc99fb9942073f333a6 Mon Sep 17 00:00:00 2001 From: guybedford Date: Sat, 4 Jun 2016 22:52:05 +0200 Subject: [PATCH] ensure @node require loads correctly from cwd --- lib/core.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/core.js b/lib/core.js index e82d0ab92..2d0af0838 100644 --- a/lib/core.js +++ b/lib/core.js @@ -114,6 +114,24 @@ function baseURLResolve(loader, name) { return new URL(name, getBaseURLObj.call(loader)).href; } +function getNodeModule(name) { + if (!isPlain(name)) + throw new Error('Node module ' + name + ' can\'t be loaded as it is not a package require.'); + + var nodePath = this._nodeRequire('path'); + // try to load from node_modules + var module; + try { + module = this._nodeRequire(nodePath.resolve(process.cwd(), 'node_modules', name)); + } + catch(e) { + // fall back to direct require (in theory this is core modules only, which should really be filtered) + if (e.code == 'MODULE_NOT_FOUND') + module = this._nodeRequire(name); + } + return module; +} + function coreResolve(name, parentName) { // standard URL resolution if (!isPlain(name)) @@ -135,9 +153,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.'); - if (!isPlain(name.substr(6))) - throw new Error('Node module ' + name.substr(6) + ' can\'t be loaded as it is not a package require.'); - this.set(name, this.newModule(getESModule(this._nodeRequire(name.substr(6))))); + this.set(name, this.newModule(getESModule(getNodeModule.call(this, name.substr(6))))); return name; }