From 0a1513d5e5f23b623dfa4bfa85261f655d3baac3 Mon Sep 17 00:00:00 2001 From: guybedford Date: Fri, 15 Jun 2018 14:23:44 +0200 Subject: [PATCH 1/4] module: cleaner runMain separation for experimental modules --- lib/internal/modules/cjs/loader.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 8bb5f9268437fc..c218dc2cac2a50 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -504,19 +504,6 @@ Module._load = function(request, parent, isMain) { debug('Module._load REQUEST %s parent: %s', request, parent.id); } - if (experimentalModules && isMain) { - if (asyncESM === undefined) lazyLoadESM(); - asyncESM.loaderPromise.then((loader) => { - return loader.import(getURLFromFilePath(request).pathname); - }) - .catch((e) => { - decorateErrorStack(e); - console.error(e); - process.exit(1); - }); - return; - } - var filename = Module._resolveFilename(request, parent, isMain); var cachedModule = Module._cache[filename]; @@ -741,7 +728,19 @@ if (experimentalModules) { // bootstrap main module. Module.runMain = function() { // Load the main module--the command line argument. - Module._load(process.argv[1], null, true); + if (experimentalModules) { + if (asyncESM === undefined) lazyLoadESM(); + asyncESM.loaderPromise.then((loader) => { + return loader.import(getURLFromFilePath(process.argv[1]).pathname); + }) + .catch((e) => { + decorateErrorStack(e); + console.error(e); + process.exit(1); + }); + } else { + Module._load(process.argv[1], null, true); + } // Handle any nextTicks added in the first tick of the program process._tickCallback(); }; From f9d777f756ff1508aa6d7f12fb2176b102a05616 Mon Sep 17 00:00:00 2001 From: guybedford Date: Fri, 15 Jun 2018 16:45:50 +0200 Subject: [PATCH 2/4] add test for cjs execution stalling --- test/es-module/test-esm-cjs-main.js | 27 ++++++++++++++++++++++++--- test/fixtures/es-modules/cjs.js | 5 +++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/es-modules/cjs.js diff --git a/test/es-module/test-esm-cjs-main.js b/test/es-module/test-esm-cjs-main.js index ed6730aec1d2a2..7a06572a38a318 100644 --- a/test/es-module/test-esm-cjs-main.js +++ b/test/es-module/test-esm-cjs-main.js @@ -1,6 +1,27 @@ -// Flags: --experimental-modules 'use strict'; + require('../common'); +const { spawn } = require('child_process'); const assert = require('assert'); -exports.asdf = 'asdf'; -assert.strictEqual(require.main.exports.asdf, 'asdf'); +const path = require('path'); + +const entry = path.resolve(__dirname, '../fixtures/es-modules/cjs.js'); + +const child = spawn(process.execPath, ['--experimental-modules', entry]); +let experimentalWarning = false; +let validatedExecution = false; +child.stderr.on('data', (data) => { + if (!experimentalWarning) { + experimentalWarning = true; + return; + } + throw new Error(data.toString()); +}); +child.stdout.on('data', (data) => { + assert.strictEqual(data.toString(), 'executed\n'); + validatedExecution = true; +}); +child.on('close', (code, stdout) => { + assert.strictEqual(validatedExecution, true); + assert.strictEqual(code, 0); +}); diff --git a/test/fixtures/es-modules/cjs.js b/test/fixtures/es-modules/cjs.js new file mode 100644 index 00000000000000..3a09c83abff9e8 --- /dev/null +++ b/test/fixtures/es-modules/cjs.js @@ -0,0 +1,5 @@ +'use strict'; + +// test we can use commonjs require +require('path'); +console.log('executed'); From 2a0dd2dca8d583e68a7de3984bae15799f9e3a28 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 20 Jun 2018 22:39:39 +0200 Subject: [PATCH 3/4] squash! add test for cjs execution stalling --- test/es-module/test-esm-cjs-main.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/es-module/test-esm-cjs-main.js b/test/es-module/test-esm-cjs-main.js index 7a06572a38a318..8de923d37b1887 100644 --- a/test/es-module/test-esm-cjs-main.js +++ b/test/es-module/test-esm-cjs-main.js @@ -1,11 +1,11 @@ 'use strict'; -require('../common'); +const common = require('../common'); +const fixtures = require('../common/fixtures'); const { spawn } = require('child_process'); const assert = require('assert'); -const path = require('path'); -const entry = path.resolve(__dirname, '../fixtures/es-modules/cjs.js'); +const entry = fixtures.path('/es-modules/cjs.js'); const child = spawn(process.execPath, ['--experimental-modules', entry]); let experimentalWarning = false; @@ -21,7 +21,7 @@ child.stdout.on('data', (data) => { assert.strictEqual(data.toString(), 'executed\n'); validatedExecution = true; }); -child.on('close', (code, stdout) => { +child.on('close', common.mustCall((code, stdout) => { assert.strictEqual(validatedExecution, true); assert.strictEqual(code, 0); -}); +})); From 1fda29b372c104a209179a88ef648c0d23f92d71 Mon Sep 17 00:00:00 2001 From: guybedford Date: Thu, 21 Jun 2018 11:28:13 +0200 Subject: [PATCH 4/4] fix test-esm-error-cache test --- test/es-module/test-esm-error-cache.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/es-module/test-esm-error-cache.js b/test/es-module/test-esm-error-cache.js index 80431512d75773..22ffa9abe96a37 100644 --- a/test/es-module/test-esm-error-cache.js +++ b/test/es-module/test-esm-error-cache.js @@ -7,7 +7,7 @@ const assert = require('assert'); common.crashOnUnhandledRejection(); -const file = '../../fixtures/syntax/bad_syntax.js'; +const file = '../fixtures/syntax/bad_syntax.js'; let error; (async () => {