From 899258e979bd66ef95a748db664872d5d3bdb433 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Sat, 24 Sep 2022 14:03:04 +0530 Subject: [PATCH 1/2] fix: respect `NODE_PATH` env variable --- bin/webpack-dev-server.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bin/webpack-dev-server.js b/bin/webpack-dev-server.js index d5262fffa7..6860469ea2 100755 --- a/bin/webpack-dev-server.js +++ b/bin/webpack-dev-server.js @@ -43,6 +43,18 @@ const isInstalled = (packageName) => { const path = require("path"); const fs = require("graceful-fs"); + // Respect NODE_PATH environment variable + try { + if ( + process.env.NODE_PATH && + fs.statSync(path.join(process.env.NODE_PATH, packageName)).isDirectory() + ) { + return true; + } + } catch (_error) { + // Nothing + } + let dir = __dirname; do { From 27b6dcb080373cd08a3128017775afb951bf2b1e Mon Sep 17 00:00:00 2001 From: "alexander.akait" Date: Tue, 27 Sep 2022 04:24:10 +0300 Subject: [PATCH 2/2] refactor: improve --- bin/webpack-dev-server.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bin/webpack-dev-server.js b/bin/webpack-dev-server.js index 6860469ea2..5cf7a3bd5a 100755 --- a/bin/webpack-dev-server.js +++ b/bin/webpack-dev-server.js @@ -43,18 +43,6 @@ const isInstalled = (packageName) => { const path = require("path"); const fs = require("graceful-fs"); - // Respect NODE_PATH environment variable - try { - if ( - process.env.NODE_PATH && - fs.statSync(path.join(process.env.NODE_PATH, packageName)).isDirectory() - ) { - return true; - } - } catch (_error) { - // Nothing - } - let dir = __dirname; do { @@ -70,6 +58,18 @@ const isInstalled = (packageName) => { // eslint-disable-next-line no-cond-assign } while (dir !== (dir = path.dirname(dir))); + // https://github.com/nodejs/node/blob/v18.9.1/lib/internal/modules/cjs/loader.js#L1274 + // @ts-ignore + for (const internalPath of require("module").globalPaths) { + try { + if (fs.statSync(path.join(internalPath, packageName)).isDirectory()) { + return true; + } + } catch (_error) { + // Nothing + } + } + return false; };