lib: lazy load necessary loaders
PR-URL: https://github.com/nodejs/node/pull/20567 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
parent
6468e3d15a
commit
6550013b73
@ -23,8 +23,6 @@
|
||||
|
||||
const { NativeModule } = require('internal/bootstrap/loaders');
|
||||
const util = require('util');
|
||||
const { decorateErrorStack } = require('internal/util');
|
||||
const { getURLFromFilePath } = require('internal/url');
|
||||
const vm = require('vm');
|
||||
const assert = require('assert').ok;
|
||||
const fs = require('fs');
|
||||
@ -53,11 +51,21 @@ const {
|
||||
|
||||
module.exports = Module;
|
||||
|
||||
// these are below module.exports for the circular reference
|
||||
const asyncESM = require('internal/process/esm_loader');
|
||||
const ModuleJob = require('internal/modules/esm/module_job');
|
||||
const createDynamicModule = require(
|
||||
'internal/modules/esm/create_dynamic_module');
|
||||
let asyncESM;
|
||||
let ModuleJob;
|
||||
let createDynamicModule;
|
||||
let getURLFromFilePath;
|
||||
let decorateErrorStack;
|
||||
|
||||
function lazyLoadESM() {
|
||||
asyncESM = require('internal/process/esm_loader');
|
||||
ModuleJob = require('internal/modules/esm/module_job');
|
||||
createDynamicModule = require(
|
||||
'internal/modules/esm/create_dynamic_module');
|
||||
decorateErrorStack = require('internal/util').decorateErrorStack;
|
||||
getURLFromFilePath = require('internal/url').getURLFromFilePath;
|
||||
}
|
||||
|
||||
const {
|
||||
CHAR_UPPERCASE_A,
|
||||
CHAR_LOWERCASE_A,
|
||||
@ -497,6 +505,7 @@ Module._load = function(request, parent, isMain) {
|
||||
}
|
||||
|
||||
if (experimentalModules && isMain) {
|
||||
if (asyncESM === undefined) lazyLoadESM();
|
||||
asyncESM.loaderPromise.then((loader) => {
|
||||
return loader.import(getURLFromFilePath(request).pathname);
|
||||
})
|
||||
@ -604,6 +613,7 @@ Module.prototype.load = function(filename) {
|
||||
this.loaded = true;
|
||||
|
||||
if (experimentalModules) {
|
||||
if (asyncESM === undefined) lazyLoadESM();
|
||||
const ESMLoader = asyncESM.ESMLoader;
|
||||
const url = getURLFromFilePath(filename);
|
||||
const urlString = `${url}`;
|
||||
@ -722,6 +732,7 @@ Module._extensions['.node'] = function(module, filename) {
|
||||
};
|
||||
|
||||
if (experimentalModules) {
|
||||
if (asyncESM === undefined) lazyLoadESM();
|
||||
Module._extensions['.mjs'] = function(module, filename) {
|
||||
throw new ERR_REQUIRE_ESM(filename);
|
||||
};
|
||||
@ -797,5 +808,5 @@ Module._preloadModules = function(requests) {
|
||||
|
||||
Module._initPaths();
|
||||
|
||||
// backwards compatibility
|
||||
// Backwards compatibility
|
||||
Module.Module = Module;
|
||||
|
Loading…
x
Reference in New Issue
Block a user