diff --git a/package-lock.json b/package-lock.json index 57f04c8..4ba1c83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -830,7 +830,7 @@ "@types/resolve": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha1-8mB00jjgJlnjI84aE9BB7uKA4ZQ=", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", "dev": true, "requires": { "@types/node": "*" @@ -1816,6 +1816,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, @@ -2464,6 +2473,17 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } } }, "p-limit": { @@ -3814,7 +3834,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=" + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-type": { "version": "2.0.0", @@ -4063,9 +4083,9 @@ "dev": true }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "requires": { "path-parse": "^1.0.6" } @@ -4136,23 +4156,38 @@ } }, "rollup-plugin-node-resolve": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.0.0.tgz", - "integrity": "sha1-dUq/SEHtS6siQVUcugoR0ExX8pA=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.1.0.tgz", + "integrity": "sha512-2hwwHNj0s8UEtUNT+lJq8rFWEznP7yJm3GCHBicadF6hiNX1aRARRZIjz2doeTlTGg/hOvJr4C/8+3k9Y/J5Hg==", "dev": true, "requires": { "@types/resolve": "0.0.8", "builtin-modules": "^3.1.0", "is-module": "^1.0.0", - "resolve": "^1.10.1", - "rollup-pluginutils": "^2.7.0" + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" }, "dependencies": { "builtin-modules": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha1-qtl8FRMet2tltQ7yCOdYTNdqdIQ=", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } } } }, diff --git a/package.json b/package.json index 5b84bb8..8f86099 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "rollup": "^1.12.0", "rollup-plugin-babel": "^4.3.2", "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-resolve": "^5.0.0", + "rollup-plugin-node-resolve": "^5.1.0", "shx": "^0.3.2", "source-map": "^0.6.1", "source-map-support": "^0.5.12", diff --git a/src/index.js b/src/index.js index fb6835b..98914fe 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ import { extname, resolve } from 'path'; -import { sync as nodeResolveSync } from 'resolve'; +import { sync as nodeResolveSync, isCore } from 'resolve'; import { createFilter } from 'rollup-pluginutils'; import { peerDependencies } from '../package.json'; import { EXTERNAL_SUFFIX, getIdFromExternalProxyId, getIdFromProxyId, HELPERS, HELPERS_ID, PROXY_SUFFIX } from './helpers'; @@ -16,10 +16,19 @@ export default function commonjs(options = {}) { const customNamedExports = {}; if (options.namedExports) { Object.keys(options.namedExports).forEach(id => { + let resolveId = id; let resolvedId; + if (isCore(id)) { + // resolve will not find npm modules with the same name as + // core modules without a trailing slash. Since core modules + // must be external, we can assume any core modules defined + // here are npm modules by that name. + resolveId += '/'; + } + try { - resolvedId = nodeResolveSync(id, { basedir: process.cwd() }); + resolvedId = nodeResolveSync(resolveId, { basedir: process.cwd() }); } catch (err) { resolvedId = resolve(id); } diff --git a/test/node_modules/events/index.js b/test/node_modules/events/index.js index 61f2f8d..cf10076 100644 --- a/test/node_modules/events/index.js +++ b/test/node_modules/events/index.js @@ -1 +1,4 @@ exports.message = 'this is not builtin'; + +const myLib = exports; +myLib.foo = 'this is a hidden export'; \ No newline at end of file diff --git a/test/samples/custom-named-exports-browser-shims/main.js b/test/samples/custom-named-exports-browser-shims/main.js new file mode 100644 index 0000000..aaadb91 --- /dev/null +++ b/test/samples/custom-named-exports-browser-shims/main.js @@ -0,0 +1,4 @@ +import { message, foo } from 'events'; + +assert.equal( message, 'this is not builtin' ); +assert.equal( foo, 'this is a hidden export' ); diff --git a/test/samples/custom-named-exports-warn-builtins/main.js b/test/samples/custom-named-exports-warn-builtins/main.js index aef4cfa..ea14a01 100644 --- a/test/samples/custom-named-exports-warn-builtins/main.js +++ b/test/samples/custom-named-exports-warn-builtins/main.js @@ -1,3 +1,3 @@ -import events from 'events'; +import { message } from 'events'; -assert.equal( events, 'x' ); +assert.equal( message, 'this is not builtin' ); diff --git a/test/test.js b/test/test.js index bee253f..0261572 100644 --- a/test/test.js +++ b/test/test.js @@ -342,6 +342,24 @@ describe('rollup-plugin-commonjs', () => { }); }); + it('handles named exports for built-in shims', async () => { + const bundle = await rollup({ + input: 'samples/custom-named-exports-browser-shims/main.js', + plugins: [ + resolve({ + preferBuiltins: false + }), + commonjs({ + namedExports: { + events: ['foo'] + } + }) + ] + }); + + await executeBundle(bundle); + }); + it('ignores false positives with namedExports (#36)', async () => { const bundle = await rollup({ input: 'samples/custom-named-exports-false-positive/main.js',