From efd0273751c7b1f0a221fc22544f2f6d565e6dbb Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 12 Nov 2021 18:15:55 +0100 Subject: [PATCH] fix(commonjs): Always sort node-resolve plugin after commonjs if necessary --- packages/commonjs/README.md | 6 +- packages/commonjs/src/dynamic-modules.js | 62 ++++++++++++++++-- .../commonjs/src/dynamic-require-paths.js | 46 ------------- packages/commonjs/src/generate-imports.js | 6 +- packages/commonjs/src/index.js | 23 ++++--- packages/commonjs/src/transform-commonjs.js | 6 +- .../commonjs/test/snapshots/function.js.md | 60 +---------------- .../commonjs/test/snapshots/function.js.snap | Bin 19636 -> 19314 bytes 8 files changed, 80 insertions(+), 129 deletions(-) delete mode 100644 packages/commonjs/src/dynamic-require-paths.js diff --git a/packages/commonjs/README.md b/packages/commonjs/README.md index 8ef7f2a0c..724ca95b0 100644 --- a/packages/commonjs/README.md +++ b/packages/commonjs/README.md @@ -42,6 +42,8 @@ export default { Then call `rollup` either via the [CLI](https://www.rollupjs.org/guide/en/#command-line-reference) or the [API](https://www.rollupjs.org/guide/en/#javascript-api). +When used together with the node-resolve plugin + ## Options ### `strictRequires` @@ -378,10 +380,12 @@ export default { format: 'iife', name: 'MyModule' }, - plugins: [resolve(), commonjs()] + plugins: [commonjs(), resolve()] }; ``` +Note that this plugin needs to be placed _before_ the node-resolve plugin. If that is not the case, it will automatically fix this by adjusting the plugins array and moving the node-resolve plugin directly behind the commonjs plugin during startup. + ## Usage with symlinks Symlinks are common in monorepos and are also created by the `npm link` command. Rollup with `@rollup/plugin-node-resolve` resolves modules to their real paths by default. So `include` and `exclude` paths should handle real paths rather than symlinked paths (e.g. `../common/node_modules/**` instead of `node_modules/**`). You may also use a regular expression for `include` that works regardless of base path. Try this: diff --git a/packages/commonjs/src/dynamic-modules.js b/packages/commonjs/src/dynamic-modules.js index 02b9845f3..272fb1374 100644 --- a/packages/commonjs/src/dynamic-modules.js +++ b/packages/commonjs/src/dynamic-modules.js @@ -1,10 +1,63 @@ +import { existsSync, readFileSync, statSync } from 'fs'; +import { join, resolve } from 'path'; + +import glob from 'glob'; + import { getVirtualPathForDynamicRequirePath, normalizePathSlashes } from './utils'; +function getPackageEntryPoint(dirPath) { + let entryPoint = 'index.js'; + + try { + if (existsSync(join(dirPath, 'package.json'))) { + entryPoint = + JSON.parse(readFileSync(join(dirPath, 'package.json'), { encoding: 'utf8' })).main || + entryPoint; + } + } catch (ignored) { + // ignored + } + + return entryPoint; +} + +function isDirectory(path) { + try { + if (statSync(path).isDirectory()) return true; + } catch (ignored) { + // Nothing to do here + } + return false; +} + +export function getDynamicRequireModules(patterns) { + const dynamicRequireModules = new Map(); + for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) { + const isNegated = pattern.startsWith('!'); + const modifyMap = (targetPath, resolvedPath) => + isNegated + ? dynamicRequireModules.delete(targetPath) + : dynamicRequireModules.set(targetPath, resolvedPath); + for (const path of glob.sync(isNegated ? pattern.substr(1) : pattern)) { + const resolvedPath = resolve(path); + const requirePath = normalizePathSlashes(resolvedPath); + if (isDirectory(resolvedPath)) { + const modulePath = resolve(join(resolvedPath, getPackageEntryPoint(path))); + modifyMap(requirePath, modulePath); + modifyMap(normalizePathSlashes(modulePath), modulePath); + } else { + modifyMap(requirePath, resolvedPath); + } + } + } + return dynamicRequireModules; +} + const FAILED_REQUIRE_ERROR = `throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');`; -export function getDynamicRequireModules( +export function getDynamicModuleRegistry( isDynamicRequireModulesEnabled, - dynamicRequireModuleSet, + dynamicRequireModules, commonDir, ignoreDynamicRequires ) { @@ -13,8 +66,7 @@ export function getDynamicRequireModules( ${FAILED_REQUIRE_ERROR} }`; } - const dynamicModuleIds = [...dynamicRequireModuleSet]; - const dynamicModuleImports = dynamicModuleIds + const dynamicModuleImports = [...dynamicRequireModules.values()] .map( (id, index) => `import ${ @@ -22,7 +74,7 @@ export function getDynamicRequireModules( } from ${JSON.stringify(id)};` ) .join('\n'); - const dynamicModuleProps = dynamicModuleIds + const dynamicModuleProps = [...dynamicRequireModules.keys()] .map( (id, index) => `\t\t${JSON.stringify( diff --git a/packages/commonjs/src/dynamic-require-paths.js b/packages/commonjs/src/dynamic-require-paths.js deleted file mode 100644 index 849ab1a9e..000000000 --- a/packages/commonjs/src/dynamic-require-paths.js +++ /dev/null @@ -1,46 +0,0 @@ -import { existsSync, readFileSync, statSync } from 'fs'; -import { join, resolve } from 'path'; - -import glob from 'glob'; - -import { normalizePathSlashes } from './utils'; - -function getPackageEntryPoint(dirPath) { - let entryPoint = 'index.js'; - - try { - if (existsSync(join(dirPath, 'package.json'))) { - entryPoint = - JSON.parse(readFileSync(join(dirPath, 'package.json'), { encoding: 'utf8' })).main || - entryPoint; - } - } catch (ignored) { - // ignored - } - - return entryPoint; -} - -function isDirectory(path) { - try { - if (statSync(path).isDirectory()) return true; - } catch (ignored) { - // Nothing to do here - } - return false; -} - -export default function getDynamicRequireModuleSet(patterns) { - const dynamicRequireModuleSet = new Set(); - for (const pattern of !patterns || Array.isArray(patterns) ? patterns || [] : [patterns]) { - const isNegated = pattern.startsWith('!'); - const modifySet = Set.prototype[isNegated ? 'delete' : 'add'].bind(dynamicRequireModuleSet); - for (const path of glob.sync(isNegated ? pattern.substr(1) : pattern)) { - modifySet(normalizePathSlashes(resolve(path))); - if (isDirectory(path)) { - modifySet(normalizePathSlashes(resolve(join(path, getPackageEntryPoint(path))))); - } - } - } - return dynamicRequireModuleSet; -} diff --git a/packages/commonjs/src/generate-imports.js b/packages/commonjs/src/generate-imports.js index e90152d36..f3c976a63 100644 --- a/packages/commonjs/src/generate-imports.js +++ b/packages/commonjs/src/generate-imports.js @@ -68,11 +68,11 @@ export function getRequireStringArg(node) { : node.arguments[0].quasis[0].value.cooked; } -export function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) { +export function hasDynamicModuleForPath(source, id, dynamicRequireModules) { if (!/^(?:\.{0,2}[/\\]|[A-Za-z]:[/\\])/.test(source)) { try { const resolvedPath = normalizePathSlashes(nodeResolveSync(source, { basedir: dirname(id) })); - if (dynamicRequireModuleSet.has(resolvedPath)) { + if (dynamicRequireModules.has(resolvedPath)) { return true; } } catch (ex) { @@ -85,7 +85,7 @@ export function hasDynamicModuleForPath(source, id, dynamicRequireModuleSet) { for (const attemptExt of ['', '.js', '.json']) { const resolvedPath = normalizePathSlashes(resolve(dirname(id), source + attemptExt)); - if (dynamicRequireModuleSet.has(resolvedPath)) { + if (dynamicRequireModules.has(resolvedPath)) { return true; } } diff --git a/packages/commonjs/src/index.js b/packages/commonjs/src/index.js index 892a4eaf3..83856200a 100644 --- a/packages/commonjs/src/index.js +++ b/packages/commonjs/src/index.js @@ -6,9 +6,8 @@ import getCommonDir from 'commondir'; import { peerDependencies } from '../package.json'; import analyzeTopLevelStatements from './analyze-top-level-statements'; -import { getDynamicRequireModules } from './dynamic-modules'; +import { getDynamicModuleRegistry, getDynamicRequireModules } from './dynamic-modules'; -import getDynamicRequireModuleSet from './dynamic-require-paths'; import { DYNAMIC_MODULES_ID, ES_IMPORT_SUFFIX, @@ -61,10 +60,11 @@ export default function commonjs(options = {}) { getWrappedIds, isRequiredId } = getResolveRequireSourcesAndGetMeta(extensions, detectCycles); - const dynamicRequireModuleSet = getDynamicRequireModuleSet(options.dynamicRequireTargets); - const isDynamicRequireModulesEnabled = dynamicRequireModuleSet.size > 0; + const dynamicRequireModules = getDynamicRequireModules(options.dynamicRequireTargets); + const isDynamicRequireModulesEnabled = dynamicRequireModules.size > 0; + // TODO Lukas do we need the CWD? const commonDir = isDynamicRequireModulesEnabled - ? getCommonDir(null, Array.from(dynamicRequireModuleSet).concat(process.cwd())) + ? getCommonDir(null, Array.from(dynamicRequireModules.keys()).concat(process.cwd())) : null; const esModulesWithDefaultExport = new Set(); @@ -111,7 +111,7 @@ export default function commonjs(options = {}) { } if ( - !dynamicRequireModuleSet.has(normalizePathSlashes(id)) && + !dynamicRequireModules.has(normalizePathSlashes(id)) && (!(hasCjsKeywords(code, ignoreGlobal) || isRequiredId(id)) || (isEsModule && !options.transformMixedEsModules)) ) { @@ -120,7 +120,7 @@ export default function commonjs(options = {}) { const needsRequireWrapper = !isEsModule && - (dynamicRequireModuleSet.has(normalizePathSlashes(id)) || strictRequiresFilter(id)); + (dynamicRequireModules.has(normalizePathSlashes(id)) || strictRequiresFilter(id)); return transformCommonjs( this.parse, @@ -133,7 +133,7 @@ export default function commonjs(options = {}) { getIgnoreTryCatchRequireStatementMode, sourceMap, isDynamicRequireModulesEnabled, - dynamicRequireModuleSet, + dynamicRequireModules, commonDir, ast, defaultIsModuleExports, @@ -146,10 +146,9 @@ export default function commonjs(options = {}) { return { name: 'commonjs', - options(options) { + options({ plugins }) { // Always sort the node-resolve plugin after the commonjs plugin as otherwise CommonJS entries // will not work with strictRequires: true - const { plugins } = options; if (Array.isArray(plugins)) { const cjsIndex = plugins.findIndex((plugin) => plugin.name === 'commonjs'); const nodeResolveIndex = plugins.findIndex((plugin) => plugin.name === 'node-resolve'); @@ -228,9 +227,9 @@ export default function commonjs(options = {}) { } if (id === DYNAMIC_MODULES_ID) { - return getDynamicRequireModules( + return getDynamicModuleRegistry( isDynamicRequireModulesEnabled, - dynamicRequireModuleSet, + dynamicRequireModules, commonDir, ignoreDynamicRequires ); diff --git a/packages/commonjs/src/transform-commonjs.js b/packages/commonjs/src/transform-commonjs.js index c6cfbdc1a..f0c43c362 100644 --- a/packages/commonjs/src/transform-commonjs.js +++ b/packages/commonjs/src/transform-commonjs.js @@ -46,7 +46,7 @@ export default async function transformCommonjs( getIgnoreTryCatchRequireStatementMode, sourceMap, isDynamicRequireModulesEnabled, - dynamicRequireModuleSet, + dynamicRequireModules, commonDir, astCache, defaultIsModuleExports, @@ -195,7 +195,7 @@ export default async function transformCommonjs( node.callee.object && node.callee.object.name === 'require' && node.callee.property.name === 'resolve' && - hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet) + hasDynamicModuleForPath(id, '/', dynamicRequireModules) ) { // TODO Lukas reimplement? uses.require = true; @@ -288,7 +288,7 @@ export default async function transformCommonjs( uses.require = true; if (isNodeRequirePropertyAccess(parent)) { // TODO Lukas reimplement? - if (hasDynamicModuleForPath(id, '/', dynamicRequireModuleSet)) { + if (hasDynamicModuleForPath(id, '/', dynamicRequireModules)) { if (parent.property.name === 'cache') { magicString.overwrite(node.start, node.end, dynamicRequireName, { storeName: true diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index 260d58e48..6e8024273 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -5624,7 +5624,7 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-requires-entry +## strict-requires-entry-node-resolve > Snapshot 1 @@ -5883,40 +5883,6 @@ Generated by [AVA](https://avajs.dev). `, } -## strict-requires-magic-string - -> Snapshot 1 - - { - 'main.js': `'use strict';␊ - ␊ - Object.defineProperty(exports, '__esModule', { value: true });␊ - ␊ - var main = {};␊ - ␊ - var hasRequiredMain;␊ - ␊ - function requireMain () {␊ - if (hasRequiredMain) return main;␊ - hasRequiredMain = 1;␊ - console.log('hey');␊ - // magic-string@0.25.7␊ - const m = new MagicString('0123456789');␊ - console.log(␊ - m.prependRight(0, 'W').prependLeft(3, 'AB').appendRight(9, 'XY').remove(6, 8).toString()␊ - );␊ - const bundle = new MagicString.Bundle();␊ - bundle.addSource({ filename: 'foo.txt', content: m });␊ - const map = bundle.generateMap({ file: 'bundle.txt', includeContent: true, hires: true });␊ - console.log(JSON.stringify(map));␊ - main.foo = 'foo';␊ - return main;␊ - }␊ - ␊ - exports.__require = requireMain;␊ - `, - } - ## strict-requires-multiple-entry > Snapshot 1 @@ -6807,27 +6773,3 @@ Generated by [AVA](https://avajs.dev). module.exports = main;␊ `, } - -## strict-requires-entry-node-resolve - -> Snapshot 1 - - { - 'main.js': `'use strict';␊ - ␊ - var main = {};␊ - ␊ - var hasRequiredMain;␊ - ␊ - function requireMain () {␊ - if (hasRequiredMain) return main;␊ - hasRequiredMain = 1;␊ - main.foo = 'foo';␊ - return main;␊ - }␊ - ␊ - var mainExports = requireMain();␊ - ␊ - module.exports = mainExports;␊ - `, - } diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index 4ec48d232698616a4f850a2f6ddcf378ff8b05e9..285f92e78bc9a0574fc7808b76085b55f143b3a1 100644 GIT binary patch literal 19314 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 literal 19636 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