From 239380192bcca06a984fbb922209481115563f65 Mon Sep 17 00:00:00 2001 From: Andrew Hyndman Date: Sat, 30 Apr 2022 13:42:37 -0700 Subject: [PATCH] Reject moduleDirectories containing a slash --- packages/node-resolve/src/index.js | 6 ++++++ packages/node-resolve/test/test.js | 22 +++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 26f2e9518..da695b1f9 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -63,6 +63,12 @@ export function nodeResolve(opts = {}) { options.dedupe.includes(importee) || options.dedupe.includes(getPackageName(importee)); } + if (moduleDirectories.some((name) => name.includes('/'))) { + throw new Error( + '`moduleDirectories` option must only contain directory names. If you want to load modules from somewhere not supported by the default module resolution algorithm, see `modulePaths`.' + ); + } + const resolveOnly = options.resolveOnly.map((pattern) => { if (pattern instanceof RegExp) { return pattern; diff --git a/packages/node-resolve/test/test.js b/packages/node-resolve/test/test.js index e82bee8f3..b40073958 100755 --- a/packages/node-resolve/test/test.js +++ b/packages/node-resolve/test/test.js @@ -257,20 +257,16 @@ test('allows custom moduleDirectories with legacy customResolveOptions.moduleDir t.snapshot(warnings); }); -test('custom moduleDirectories do not support nested dependencies', async (t) => { - const warnings = []; - const bundle = await rollup({ - input: 'custom-module-path/main.js', - onwarn: (warning) => warnings.push(warning), - plugins: [ +test('moduleDirectories option rejects paths that contain a slash', async (t) => { + t.throws( + () => nodeResolve({ - moduleDirectories: [join(process.cwd(), 'custom-module-path/node_modules')] - }) - ] - }); - - t.is(warnings.length, 1); - t.is(bundle.cache.modules.length, 2); + moduleDirectories: ['some/path'] + }), + { + message: /must only contain directory names/ + } + ); }); test('allows custom modulePaths', async (t) => {