|
23 | 23 |
|
24 | 24 | const { NativeModule } = require('internal/bootstrap/loaders');
|
25 | 25 | const util = require('util');
|
26 |
| -const { decorateErrorStack } = require('internal/util'); |
27 |
| -const { getURLFromFilePath } = require('internal/url'); |
28 | 26 | const vm = require('vm');
|
29 | 27 | const assert = require('assert').ok;
|
30 | 28 | const fs = require('fs');
|
@@ -53,11 +51,21 @@ const {
|
53 | 51 |
|
54 | 52 | module.exports = Module;
|
55 | 53 |
|
56 |
| -// these are below module.exports for the circular reference |
57 |
| -const asyncESM = require('internal/process/esm_loader'); |
58 |
| -const ModuleJob = require('internal/modules/esm/module_job'); |
59 |
| -const createDynamicModule = require( |
60 |
| - 'internal/modules/esm/create_dynamic_module'); |
| 54 | +let asyncESM; |
| 55 | +let ModuleJob; |
| 56 | +let createDynamicModule; |
| 57 | +let getURLFromFilePath; |
| 58 | +let decorateErrorStack; |
| 59 | + |
| 60 | +function lazyLoadESM() { |
| 61 | + asyncESM = require('internal/process/esm_loader'); |
| 62 | + ModuleJob = require('internal/modules/esm/module_job'); |
| 63 | + createDynamicModule = require( |
| 64 | + 'internal/modules/esm/create_dynamic_module'); |
| 65 | + decorateErrorStack = require('internal/util').decorateErrorStack; |
| 66 | + getURLFromFilePath = require('internal/url').getURLFromFilePath; |
| 67 | +} |
| 68 | + |
61 | 69 | const {
|
62 | 70 | CHAR_UPPERCASE_A,
|
63 | 71 | CHAR_LOWERCASE_A,
|
@@ -497,6 +505,7 @@ Module._load = function(request, parent, isMain) {
|
497 | 505 | }
|
498 | 506 |
|
499 | 507 | if (experimentalModules && isMain) {
|
| 508 | + if (asyncESM === undefined) lazyLoadESM(); |
500 | 509 | asyncESM.loaderPromise.then((loader) => {
|
501 | 510 | return loader.import(getURLFromFilePath(request).pathname);
|
502 | 511 | })
|
@@ -604,6 +613,7 @@ Module.prototype.load = function(filename) {
|
604 | 613 | this.loaded = true;
|
605 | 614 |
|
606 | 615 | if (experimentalModules) {
|
| 616 | + if (asyncESM === undefined) lazyLoadESM(); |
607 | 617 | const ESMLoader = asyncESM.ESMLoader;
|
608 | 618 | const url = getURLFromFilePath(filename);
|
609 | 619 | const urlString = `${url}`;
|
@@ -722,6 +732,7 @@ Module._extensions['.node'] = function(module, filename) {
|
722 | 732 | };
|
723 | 733 |
|
724 | 734 | if (experimentalModules) {
|
| 735 | + if (asyncESM === undefined) lazyLoadESM(); |
725 | 736 | Module._extensions['.mjs'] = function(module, filename) {
|
726 | 737 | throw new ERR_REQUIRE_ESM(filename);
|
727 | 738 | };
|
@@ -797,5 +808,5 @@ Module._preloadModules = function(requests) {
|
797 | 808 |
|
798 | 809 | Module._initPaths();
|
799 | 810 |
|
800 |
| -// backwards compatibility |
| 811 | +// Backwards compatibility |
801 | 812 | Module.Module = Module;
|
0 commit comments