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 { NativeModule } = require('internal/bootstrap/loaders');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const { decorateErrorStack } = require('internal/util');
|
|
||||||
const { getURLFromFilePath } = require('internal/url');
|
|
||||||
const vm = require('vm');
|
const vm = require('vm');
|
||||||
const assert = require('assert').ok;
|
const assert = require('assert').ok;
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
@ -53,11 +51,21 @@ const {
|
|||||||
|
|
||||||
module.exports = Module;
|
module.exports = Module;
|
||||||
|
|
||||||
// these are below module.exports for the circular reference
|
let asyncESM;
|
||||||
const asyncESM = require('internal/process/esm_loader');
|
let ModuleJob;
|
||||||
const ModuleJob = require('internal/modules/esm/module_job');
|
let createDynamicModule;
|
||||||
const createDynamicModule = require(
|
let getURLFromFilePath;
|
||||||
'internal/modules/esm/create_dynamic_module');
|
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 {
|
const {
|
||||||
CHAR_UPPERCASE_A,
|
CHAR_UPPERCASE_A,
|
||||||
CHAR_LOWERCASE_A,
|
CHAR_LOWERCASE_A,
|
||||||
@ -497,6 +505,7 @@ Module._load = function(request, parent, isMain) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (experimentalModules && isMain) {
|
if (experimentalModules && isMain) {
|
||||||
|
if (asyncESM === undefined) lazyLoadESM();
|
||||||
asyncESM.loaderPromise.then((loader) => {
|
asyncESM.loaderPromise.then((loader) => {
|
||||||
return loader.import(getURLFromFilePath(request).pathname);
|
return loader.import(getURLFromFilePath(request).pathname);
|
||||||
})
|
})
|
||||||
@ -604,6 +613,7 @@ Module.prototype.load = function(filename) {
|
|||||||
this.loaded = true;
|
this.loaded = true;
|
||||||
|
|
||||||
if (experimentalModules) {
|
if (experimentalModules) {
|
||||||
|
if (asyncESM === undefined) lazyLoadESM();
|
||||||
const ESMLoader = asyncESM.ESMLoader;
|
const ESMLoader = asyncESM.ESMLoader;
|
||||||
const url = getURLFromFilePath(filename);
|
const url = getURLFromFilePath(filename);
|
||||||
const urlString = `${url}`;
|
const urlString = `${url}`;
|
||||||
@ -722,6 +732,7 @@ Module._extensions['.node'] = function(module, filename) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (experimentalModules) {
|
if (experimentalModules) {
|
||||||
|
if (asyncESM === undefined) lazyLoadESM();
|
||||||
Module._extensions['.mjs'] = function(module, filename) {
|
Module._extensions['.mjs'] = function(module, filename) {
|
||||||
throw new ERR_REQUIRE_ESM(filename);
|
throw new ERR_REQUIRE_ESM(filename);
|
||||||
};
|
};
|
||||||
@ -797,5 +808,5 @@ Module._preloadModules = function(requests) {
|
|||||||
|
|
||||||
Module._initPaths();
|
Module._initPaths();
|
||||||
|
|
||||||
// backwards compatibility
|
// Backwards compatibility
|
||||||
Module.Module = Module;
|
Module.Module = Module;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user