From da404173a89785c5901a447a89c12dc683bae07b Mon Sep 17 00:00:00 2001 From: Bradley Farias Date: Mon, 20 Nov 2017 10:49:54 -0600 Subject: [PATCH] module: be lazy when creating CJS facades This should remove the penalty for loading CJS that is never imported. PR-URL: https://github.com/nodejs/node/pull/17153 Reviewed-By: Jeremiah Senkpiel Reviewed-By: Benjamin Gruenbaum Reviewed-By: Colin Ihrig Reviewed-By: Timothy Gu Reviewed-By: James M Snell --- lib/module.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/module.js b/lib/module.js index ef5b3fe4c34ae0..97654d7dde7654 100644 --- a/lib/module.js +++ b/lib/module.js @@ -557,15 +557,21 @@ Module.prototype.load = function(filename) { if (ESMLoader) { const url = getURLFromFilePath(filename); const urlString = `${url}`; + const exports = this.exports; if (ESMLoader.moduleMap.has(urlString) !== true) { - const ctx = createDynamicModule(['default'], url); - ctx.reflect.exports.default.set(this.exports); - ESMLoader.moduleMap.set(urlString, - new ModuleJob(ESMLoader, url, async () => ctx)); + ESMLoader.moduleMap.set( + urlString, + new ModuleJob(ESMLoader, url, async () => { + const ctx = createDynamicModule( + ['default'], url); + ctx.reflect.exports.default.set(exports); + return ctx; + }) + ); } else { const job = ESMLoader.moduleMap.get(urlString); if (job.reflect) - job.reflect.exports.default.set(this.exports); + job.reflect.exports.default.set(exports); } } };