|
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