Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Bedford <guybedford@gmail.com>2018-02-12 14:02:42 +0300
committerguybedford <guybedford@gmail.com>2018-02-14 17:35:12 +0300
commitf1fc426cce9db230cb83866871f355afa0b92d3b (patch)
treec0c4bd08e279d6696d3b2542f8ab62d713d2a61d /lib/module.js
parent0e7b61229aa602e55c5fb034a63d7da97eecff3b (diff)
module: support main w/o extension, pjson cache
This adds support for ensuring that the top-level main into Node is supported loading when it has no extension for backwards-compat with NodeJS bin workflows. In addition package.json caching is implemented in the module lookup process. PR-URL: https://github.com/nodejs/node/pull/18728 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Diffstat (limited to 'lib/module.js')
-rw-r--r--lib/module.js29
1 files changed, 8 insertions, 21 deletions
diff --git a/lib/module.js b/lib/module.js
index 5ee537f1572..c3250608ebe 100644
--- a/lib/module.js
+++ b/lib/module.js
@@ -24,7 +24,6 @@
const NativeModule = require('native_module');
const util = require('util');
const { decorateErrorStack } = require('internal/util');
-const internalModule = require('internal/module');
const { getURLFromFilePath } = require('internal/url');
const vm = require('vm');
const assert = require('assert').ok;
@@ -35,6 +34,7 @@ const {
internalModuleReadJSON,
internalModuleStat
} = process.binding('fs');
+const internalModule = require('internal/module');
const preserveSymlinks = !!process.binding('config').preserveSymlinks;
const experimentalModules = !!process.binding('config').experimentalModules;
@@ -43,10 +43,9 @@ const errors = require('internal/errors');
module.exports = Module;
// these are below module.exports for the circular reference
-const Loader = require('internal/loader/Loader');
+const internalESModule = require('internal/process/modules');
const ModuleJob = require('internal/loader/ModuleJob');
const createDynamicModule = require('internal/loader/CreateDynamicModule');
-let ESMLoader;
function stat(filename) {
filename = path.toNamespacedPath(filename);
@@ -447,7 +446,6 @@ Module._resolveLookupPaths = function(request, parent, newReturn) {
return (newReturn ? parentDir : [id, parentDir]);
};
-
// Check the cache for the requested file.
// 1. If a module already exists in the cache: return its exports object.
// 2. If the module is native: call `NativeModule.require()` with the
@@ -460,22 +458,10 @@ Module._load = function(request, parent, isMain) {
debug('Module._load REQUEST %s parent: %s', request, parent.id);
}
- if (isMain && experimentalModules) {
- (async () => {
- // loader setup
- if (!ESMLoader) {
- ESMLoader = new Loader();
- const userLoader = process.binding('config').userLoader;
- if (userLoader) {
- ESMLoader.isMain = false;
- const hooks = await ESMLoader.import(userLoader);
- ESMLoader = new Loader();
- ESMLoader.hook(hooks);
- }
- }
- Loader.registerImportDynamicallyCallback(ESMLoader);
- await ESMLoader.import(getURLFromFilePath(request).pathname);
- })()
+ if (experimentalModules && isMain) {
+ internalESModule.loaderPromise.then((loader) => {
+ return loader.import(getURLFromFilePath(request).pathname);
+ })
.catch((e) => {
decorateErrorStack(e);
console.error(e);
@@ -578,7 +564,8 @@ Module.prototype.load = function(filename) {
Module._extensions[extension](this, filename);
this.loaded = true;
- if (ESMLoader) {
+ if (experimentalModules) {
+ const ESMLoader = internalESModule.ESMLoader;
const url = getURLFromFilePath(filename);
const urlString = `${url}`;
const exports = this.exports;