From 2b69e65a9fec19be44a84409fb91bafd5828333a Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Fri, 16 Mar 2018 13:17:42 +0200 Subject: [PATCH 1/3] module: skip preserveSymlinks for main --- lib/internal/modules/esm/default_resolve.js | 5 +++-- test/es-module/test-esm-symlink-main.js | 11 +++++++++++ test/fixtures/es-modules/symlink.js | 1 + test/fixtures/es-modules/symlink.mjs | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 test/es-module/test-esm-symlink-main.js create mode 120000 test/fixtures/es-modules/symlink.js create mode 100644 test/fixtures/es-modules/symlink.mjs diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js index 00461e7df1f684..60516535e9ad03 100644 --- a/lib/internal/modules/esm/default_resolve.js +++ b/lib/internal/modules/esm/default_resolve.js @@ -69,7 +69,9 @@ function resolve(specifier, parentURL) { throw e; } - if (!preserveSymlinks) { + const isMain = parentURL === undefined; + + if (!preserveSymlinks || isMain) { const real = realpathSync(getPathFromURL(url), { [internalFS.realpathCacheKey]: realpathCache }); @@ -83,7 +85,6 @@ function resolve(specifier, parentURL) { let format = extensionFormatMap[ext]; if (!format) { - const isMain = parentURL === undefined; if (isMain) format = 'cjs'; else diff --git a/test/es-module/test-esm-symlink-main.js b/test/es-module/test-esm-symlink-main.js new file mode 100644 index 00000000000000..17c685876d23a4 --- /dev/null +++ b/test/es-module/test-esm-symlink-main.js @@ -0,0 +1,11 @@ +'use strict'; + +const assert = require('assert'); +const path = require('path'); +const entry = path.resolve(__dirname, '../fixtures/es-modules/symlink.js'); +const { spawn } = require('child_process'); + +spawn(process.execPath, ['--experimental-modules', '--preserve-symlinks', entry], + { stdio: 'inherit' }).on('exit', (code) => { + assert.strictEqual(code, 0); +}); diff --git a/test/fixtures/es-modules/symlink.js b/test/fixtures/es-modules/symlink.js new file mode 120000 index 00000000000000..2c3fb9559d5350 --- /dev/null +++ b/test/fixtures/es-modules/symlink.js @@ -0,0 +1 @@ +symlink.mjs \ No newline at end of file diff --git a/test/fixtures/es-modules/symlink.mjs b/test/fixtures/es-modules/symlink.mjs new file mode 100644 index 00000000000000..8ce1299d1616bf --- /dev/null +++ b/test/fixtures/es-modules/symlink.mjs @@ -0,0 +1 @@ +export var symlinked = true; From 053cf5d1fe5794f9849b6b06c09e8f651b3c941a Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Tue, 20 Mar 2018 16:38:44 +0200 Subject: [PATCH 2/3] generate symlink in tmpdir --- test/es-module/test-esm-symlink-main.js | 16 ++++++++++++++-- test/fixtures/es-modules/symlink.js | 1 - 2 files changed, 14 insertions(+), 3 deletions(-) delete mode 120000 test/fixtures/es-modules/symlink.js diff --git a/test/es-module/test-esm-symlink-main.js b/test/es-module/test-esm-symlink-main.js index 17c685876d23a4..33acb4ca863d63 100644 --- a/test/es-module/test-esm-symlink-main.js +++ b/test/es-module/test-esm-symlink-main.js @@ -2,10 +2,22 @@ const assert = require('assert'); const path = require('path'); -const entry = path.resolve(__dirname, '../fixtures/es-modules/symlink.js'); const { spawn } = require('child_process'); +const tmpdir = require('../common/tmpdir'); +const fs = require('fs'); +tmpdir.refresh(); -spawn(process.execPath, ['--experimental-modules', '--preserve-symlinks', entry], +const realPath = path.resolve(__dirname, '../fixtures/es-modules/symlink.mjs'); +const symlinkPath = path.resolve(tmpdir.path, 'symlink.js'); + +try { + fs.symlinkSync(realPath, symlinkPath); +} catch (err) { + if (err.code !== 'EPERM') throw err; + common.skip('insufficient privileges for symlinks'); +} + +spawn(process.execPath, ['--experimental-modules', '--preserve-symlinks', symlinkPath], { stdio: 'inherit' }).on('exit', (code) => { assert.strictEqual(code, 0); }); diff --git a/test/fixtures/es-modules/symlink.js b/test/fixtures/es-modules/symlink.js deleted file mode 120000 index 2c3fb9559d5350..00000000000000 --- a/test/fixtures/es-modules/symlink.js +++ /dev/null @@ -1 +0,0 @@ -symlink.mjs \ No newline at end of file From 994ed4e99ccfbaf9a671544f71073c9426e494ca Mon Sep 17 00:00:00 2001 From: guybedford Date: Tue, 20 Mar 2018 19:01:12 +0200 Subject: [PATCH 3/3] linting fixes --- test/es-module/test-esm-symlink-main.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/es-module/test-esm-symlink-main.js b/test/es-module/test-esm-symlink-main.js index 33acb4ca863d63..f7631ef2e5bdca 100644 --- a/test/es-module/test-esm-symlink-main.js +++ b/test/es-module/test-esm-symlink-main.js @@ -1,5 +1,6 @@ 'use strict'; +const common = require('../common'); const assert = require('assert'); const path = require('path'); const { spawn } = require('child_process'); @@ -17,7 +18,8 @@ try { common.skip('insufficient privileges for symlinks'); } -spawn(process.execPath, ['--experimental-modules', '--preserve-symlinks', symlinkPath], +spawn(process.execPath, + ['--experimental-modules', '--preserve-symlinks', symlinkPath], { stdio: 'inherit' }).on('exit', (code) => { assert.strictEqual(code, 0); });