summaryrefslogtreecommitdiff
path: root/lib/internal/modules/cjs/loader.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/internal/modules/cjs/loader.js')
-rw-r--r--lib/internal/modules/cjs/loader.js28
1 files changed, 11 insertions, 17 deletions
diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js
index 862b149e5a..479044a26a 100644
--- a/lib/internal/modules/cjs/loader.js
+++ b/lib/internal/modules/cjs/loader.js
@@ -74,9 +74,7 @@ const experimentalExports = getOptionValue('--experimental-exports');
module.exports = { wrapSafe, Module };
-let asyncESM;
-let ModuleJob;
-let createDynamicModule;
+let asyncESM, ModuleJob, ModuleWrap, kInstantiated;
const {
CHAR_FORWARD_SLASH,
@@ -819,21 +817,18 @@ Module.prototype.load = function(filename) {
const module = ESMLoader.moduleMap.get(url);
// Create module entry at load time to snapshot exports correctly
const exports = this.exports;
- if (module !== undefined) { // Called from cjs translator
- if (module.reflect) {
- module.reflect.onReady((reflect) => {
- reflect.exports.default.set(exports);
- });
- }
+ // Called from cjs translator
+ if (module !== undefined && module.module !== undefined) {
+ if (module.module.getStatus() >= kInstantiated)
+ module.module.setExport('default', exports);
} else { // preemptively cache
ESMLoader.moduleMap.set(
url,
- new ModuleJob(ESMLoader, url, async () => {
- return createDynamicModule(
- [], ['default'], url, (reflect) => {
- reflect.exports.default.set(exports);
- });
- })
+ new ModuleJob(ESMLoader, url, () =>
+ new ModuleWrap(function() {
+ this.setExport('default', exports);
+ }, ['default'], url)
+ )
);
}
}
@@ -1150,6 +1145,5 @@ Module.Module = Module;
if (experimentalModules) {
asyncESM = require('internal/process/esm_loader');
ModuleJob = require('internal/modules/esm/module_job');
- createDynamicModule = require(
- 'internal/modules/esm/create_dynamic_module');
+ ({ ModuleWrap, kInstantiated } = internalBinding('module_wrap'));
}