module: fix for #17130 shared loader cjs dep
PR-URL: https://github.com/nodejs/node/pull/17131 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com> Reviewed-By: Bradley Farias <bradley.meck@gmail.com>
This commit is contained in:
parent
c2d738db80
commit
1f5ee33dcb
@ -2,6 +2,7 @@
|
||||
|
||||
const fs = require('fs');
|
||||
const internalCJSModule = require('internal/module');
|
||||
const CJSModule = require('module');
|
||||
const internalURLModule = require('internal/url');
|
||||
const internalFS = require('internal/fs');
|
||||
const NativeModule = require('native_module');
|
||||
@ -35,11 +36,19 @@ loaders.set('esm', async (url) => {
|
||||
});
|
||||
|
||||
// Strategy for loading a node-style CommonJS module
|
||||
const isWindows = process.platform === 'win32';
|
||||
const winSepRegEx = /\//g;
|
||||
loaders.set('cjs', async (url) => {
|
||||
const pathname = internalURLModule.getPathFromURL(new URL(url));
|
||||
const module = CJSModule._cache[
|
||||
isWindows ? pathname.replace(winSepRegEx, '\\') : pathname];
|
||||
if (module && module.loaded) {
|
||||
const ctx = createDynamicModule(['default'], url, undefined);
|
||||
ctx.reflect.exports.default.set(module.exports);
|
||||
return ctx;
|
||||
}
|
||||
return createDynamicModule(['default'], url, (reflect) => {
|
||||
debug(`Loading CJSModule ${url}`);
|
||||
const CJSModule = require('module');
|
||||
const pathname = internalURLModule.getPathFromURL(new URL(url));
|
||||
CJSModule._load(pathname);
|
||||
});
|
||||
});
|
||||
|
@ -39,6 +39,9 @@ const experimentalModules = !!process.binding('config').experimentalModules;
|
||||
|
||||
const errors = require('internal/errors');
|
||||
|
||||
module.exports = Module;
|
||||
|
||||
// these are below module.exports for the circular reference
|
||||
const Loader = require('internal/loader/Loader');
|
||||
const ModuleJob = require('internal/loader/ModuleJob');
|
||||
const { createDynamicModule } = require('internal/loader/ModuleWrap');
|
||||
@ -72,7 +75,6 @@ function Module(id, parent) {
|
||||
this.loaded = false;
|
||||
this.children = [];
|
||||
}
|
||||
module.exports = Module;
|
||||
|
||||
const builtinModules = Object.keys(NativeModule._source)
|
||||
.filter(NativeModule.nonInternalExists);
|
||||
|
7
test/es-module/test-esm-shared-loader-dep.mjs
Normal file
7
test/es-module/test-esm-shared-loader-dep.mjs
Normal file
@ -0,0 +1,7 @@
|
||||
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs
|
||||
/* eslint-disable required-modules */
|
||||
import assert from 'assert';
|
||||
import './test-esm-ok.mjs';
|
||||
import dep from '../fixtures/es-module-loaders/loader-dep.js';
|
||||
|
||||
assert.strictEqual(dep.format, 'esm');
|
7
test/fixtures/es-module-loaders/loader-shared-dep.mjs
vendored
Normal file
7
test/fixtures/es-module-loaders/loader-shared-dep.mjs
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
import dep from './loader-dep.js';
|
||||
import assert from 'assert';
|
||||
|
||||
export function resolve(specifier, base, defaultResolve) {
|
||||
assert.equal(dep.format, 'esm');
|
||||
return defaultResolve(specifier, base);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user