Skip to content

Commit 10a0650

Browse files
committed
module: fix for #17130 shared loader cjs dep
1 parent f722d31 commit 10a0650

File tree

4 files changed

+25
-3
lines changed

4 files changed

+25
-3
lines changed

lib/internal/loader/ModuleRequest.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const fs = require('fs');
44
const internalCJSModule = require('internal/module');
5+
const CJSModule = require('module');
56
const internalURLModule = require('internal/url');
67
const internalFS = require('internal/fs');
78
const NativeModule = require('native_module');
@@ -36,10 +37,15 @@ loaders.set('esm', async (url) => {
3637

3738
// Strategy for loading a node-style CommonJS module
3839
loaders.set('cjs', async (url) => {
40+
const pathname = internalURLModule.getPathFromURL(new URL(url));
41+
const module = CJSModule._cache[pathname];
42+
if (module && module.loaded) {
43+
const ctx = createDynamicModule(['default'], url, undefined);
44+
ctx.reflect.exports.default.set(module.exports);
45+
return ctx;
46+
}
3947
return createDynamicModule(['default'], url, (reflect) => {
4048
debug(`Loading CJSModule ${url}`);
41-
const CJSModule = require('module');
42-
const pathname = internalURLModule.getPathFromURL(new URL(url));
4349
CJSModule._load(pathname);
4450
});
4551
});

lib/module.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ const experimentalModules = !!process.binding('config').experimentalModules;
3939

4040
const errors = require('internal/errors');
4141

42+
module.exports = Module;
43+
44+
// these are below module.exports for the circular reference
4245
const Loader = require('internal/loader/Loader');
4346
const ModuleJob = require('internal/loader/ModuleJob');
4447
const { createDynamicModule } = require('internal/loader/ModuleWrap');
@@ -72,7 +75,6 @@ function Module(id, parent) {
7275
this.loaded = false;
7376
this.children = [];
7477
}
75-
module.exports = Module;
7678

7779
Module._cache = Object.create(null);
7880
Module._pathCache = Object.create(null);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs
2+
/* eslint-disable required-modules */
3+
import assert from 'assert';
4+
import './test-esm-ok.mjs';
5+
import dep from '../fixtures/es-module-loaders/loader-dep.js';
6+
7+
assert.strictEqual(dep.format, 'esm');
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import dep from './loader-dep.js';
2+
import assert from 'assert';
3+
4+
export function resolve(specifier, base, defaultResolve) {
5+
assert.equal(dep.format, 'esm');
6+
return defaultResolve(specifier, base);
7+
}

0 commit comments

Comments
 (0)