diff options
author | Guy Bedford <guybedford@gmail.com> | 2018-03-16 13:17:42 +0200 |
---|---|---|
committer | guybedford <guybedford@gmail.com> | 2018-04-01 17:32:26 +0200 |
commit | 141be923f3249af870f274524dd0dacd3faf22c8 (patch) | |
tree | 7d4baf5438217c50588e270e5dfa0a57a9fc0b80 | |
parent | 254058109f469f64b8ca23bb65a206abab380604 (diff) | |
download | android-node-v8-141be923f3249af870f274524dd0dacd3faf22c8.tar.gz android-node-v8-141be923f3249af870f274524dd0dacd3faf22c8.tar.bz2 android-node-v8-141be923f3249af870f274524dd0dacd3faf22c8.zip |
module: skip preserveSymlinks for main
PR-URL: https://github.com/nodejs/node/pull/19388
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | lib/internal/modules/esm/default_resolve.js | 5 | ||||
-rw-r--r-- | test/es-module/test-esm-symlink-main.js | 25 | ||||
-rw-r--r-- | test/fixtures/es-modules/symlink.mjs | 1 |
3 files changed, 29 insertions, 2 deletions
diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js index 00461e7df1..60516535e9 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 0000000000..f7631ef2e5 --- /dev/null +++ b/test/es-module/test-esm-symlink-main.js @@ -0,0 +1,25 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const path = require('path'); +const { spawn } = require('child_process'); +const tmpdir = require('../common/tmpdir'); +const fs = require('fs'); +tmpdir.refresh(); + +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.mjs b/test/fixtures/es-modules/symlink.mjs new file mode 100644 index 0000000000..8ce1299d16 --- /dev/null +++ b/test/fixtures/es-modules/symlink.mjs @@ -0,0 +1 @@ +export var symlinked = true; |