From 2496db8e0946de58911cac7b495d854cb18c179d Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sun, 26 Apr 2020 21:40:01 -0700 Subject: [PATCH] module: no type module resolver side effects PR-URL: https://github.com/nodejs/node/pull/33086 Reviewed-By: Jan Krems Reviewed-By: Geoffrey Booth --- doc/api/esm.md | 7 ------- lib/internal/modules/esm/resolve.js | 9 +-------- test/es-module/test-esm-type-main.mjs | 9 +++++++++ test/fixtures/node_modules/type-main/index.js | 1 + test/fixtures/node_modules/type-main/package.json | 4 ++++ 5 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 test/es-module/test-esm-type-main.mjs create mode 100644 test/fixtures/node_modules/type-main/index.js create mode 100644 test/fixtures/node_modules/type-main/package.json diff --git a/doc/api/esm.md b/doc/api/esm.md index 49c467effbc3cd..5047600f988f66 100644 --- a/doc/api/esm.md +++ b/doc/api/esm.md @@ -1601,13 +1601,6 @@ The resolver can throw the following errors: > 1. Return **PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, > _mainExport_, _""_). > 1. Throw a _Package Path Not Exported_ error. -> 1. If _pjson.main_ is a String, then -> 1. Let _resolvedMain_ be the URL resolution of _packageURL_, "/", and -> _pjson.main_. -> 1. If the file at _resolvedMain_ exists, then -> 1. Return _resolvedMain_. -> 1. If _pjson.type_ is equal to _"module"_, then -> 1. Throw a _Module Not Found_ error. > 1. Let _legacyMainURL_ be the result applying the legacy > **LOAD_AS_DIRECTORY** CommonJS resolver to _packageURL_, throwing a > _Module Not Found_ error for no resolution. diff --git a/lib/internal/modules/esm/resolve.js b/lib/internal/modules/esm/resolve.js index 5bb2f37e53eeb5..8b8582544494a5 100644 --- a/lib/internal/modules/esm/resolve.js +++ b/lib/internal/modules/esm/resolve.js @@ -439,11 +439,6 @@ function packageMainResolve(packageJSONUrl, packageConfig, base, conditions) { throw new ERR_PACKAGE_PATH_NOT_EXPORTED(packageJSONUrl, '.'); } - if (packageConfig.main !== undefined) { - const resolved = new URL(packageConfig.main, packageJSONUrl); - const path = fileURLToPath(resolved); - if (tryStatSync(path).isFile()) return resolved; - } if (getOptionValue('--experimental-specifier-resolution') === 'node') { if (packageConfig.main !== undefined) { return finalizeResolution( @@ -453,9 +448,7 @@ function packageMainResolve(packageJSONUrl, packageConfig, base, conditions) { new URL('index', packageJSONUrl), base); } } - if (packageConfig.type !== 'module') { - return legacyMainResolve(packageJSONUrl, packageConfig); - } + return legacyMainResolve(packageJSONUrl, packageConfig); } throw new ERR_MODULE_NOT_FOUND( diff --git a/test/es-module/test-esm-type-main.mjs b/test/es-module/test-esm-type-main.mjs new file mode 100644 index 00000000000000..012cf4f35fc959 --- /dev/null +++ b/test/es-module/test-esm-type-main.mjs @@ -0,0 +1,9 @@ +import { mustNotCall } from '../common/index.mjs'; +import assert from 'assert'; +import { importFixture } from '../fixtures/pkgexports.mjs'; + +(async () => { + const m = await importFixture('type-main'); + assert.strictEqual(m.default, 'asdf'); +})() +.catch(mustNotCall); diff --git a/test/fixtures/node_modules/type-main/index.js b/test/fixtures/node_modules/type-main/index.js new file mode 100644 index 00000000000000..a4cb53964349f5 --- /dev/null +++ b/test/fixtures/node_modules/type-main/index.js @@ -0,0 +1 @@ +export default 'asdf'; diff --git a/test/fixtures/node_modules/type-main/package.json b/test/fixtures/node_modules/type-main/package.json new file mode 100644 index 00000000000000..7665d7a8037428 --- /dev/null +++ b/test/fixtures/node_modules/type-main/package.json @@ -0,0 +1,4 @@ +{ + "main": "index", + "type": "module" +}