From 45cfb235b09acf2d8f4fe00df4ef77e646e2b61d Mon Sep 17 00:00:00 2001 From: Daniel Cohen Gindi Date: Thu, 8 Oct 2020 17:59:03 +0300 Subject: [PATCH] Register dynamic modules when a different loader loads the entry file --- .../commonjs/src/dynamic-packages-manager.js | 27 +++++------- packages/commonjs/src/index.js | 15 +++---- packages/commonjs/src/transform.js | 34 +++++++++------ .../dynamic-require-instances/package/main.js | 2 +- .../dynamic-require-different-loader/main.js | 1 + .../submodule1.js | 2 + .../submodule2.js | 3 ++ .../importer.js | 1 + .../dynamic-require-es-mixed-helpers/main.js | 5 +++ .../submodule.js | 1 + .../commonjs/test/snapshots/function.js.md | 2 +- .../commonjs/test/snapshots/function.js.snap | Bin 12356 -> 11042 bytes packages/commonjs/test/test.js | 41 ++++++++++++++++++ 13 files changed, 93 insertions(+), 41 deletions(-) create mode 100755 packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/main.js create mode 100755 packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule1.js create mode 100755 packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule2.js create mode 100755 packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/importer.js create mode 100755 packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/main.js create mode 100755 packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/submodule.js diff --git a/packages/commonjs/src/dynamic-packages-manager.js b/packages/commonjs/src/dynamic-packages-manager.js index 220e41f8e..3bc559e02 100644 --- a/packages/commonjs/src/dynamic-packages-manager.js +++ b/packages/commonjs/src/dynamic-packages-manager.js @@ -34,26 +34,19 @@ export function getDynamicPackagesModule(dynamicRequireModuleDirPaths, commonDir } export function getDynamicPackagesEntryIntro( - id, dynamicRequireModuleDirPaths, dynamicRequireModuleSet ) { - try { - const code = readFileSync(id, { encoding: 'utf8' }); - let dynamicImports = Array.from( - dynamicRequireModuleSet, - (dynamicId) => `require(${JSON.stringify(DYNAMIC_REGISTER_PREFIX + dynamicId)});` - ).join('\n'); + let dynamicImports = Array.from( + dynamicRequireModuleSet, + (dynamicId) => `require(${JSON.stringify(DYNAMIC_REGISTER_PREFIX + dynamicId)});` + ).join('\n'); - if (dynamicRequireModuleDirPaths.length) { - dynamicImports += `require(${JSON.stringify( - DYNAMIC_REGISTER_PREFIX + DYNAMIC_PACKAGES_ID - )});`; - } - - return `${dynamicImports}\n${code}`; - } catch (ex) { - this.warn(`Failed to read file ${id}, dynamic modules might not work correctly`); - return null; + if (dynamicRequireModuleDirPaths.length) { + dynamicImports += `require(${JSON.stringify( + DYNAMIC_REGISTER_PREFIX + DYNAMIC_PACKAGES_ID + )});`; } + + return dynamicImports; } diff --git a/packages/commonjs/src/index.js b/packages/commonjs/src/index.js index 646da0e18..30bc84126 100644 --- a/packages/commonjs/src/index.js +++ b/packages/commonjs/src/index.js @@ -76,6 +76,13 @@ export default function commonjs(options = {}) { const sourceMap = options.sourceMap !== false; function transformAndCheckExports(code, id) { + if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) { + code = getDynamicPackagesEntryIntro( + dynamicRequireModuleDirPaths, + dynamicRequireModuleSet + ) + code; + } + const { isEsModule, hasDefaultExport, hasNamedExports, ast } = checkEsModule( this.parse, code, @@ -176,14 +183,6 @@ export default function commonjs(options = {}) { ); } - if (isDynamicRequireModulesEnabled && this.getModuleInfo(id).isEntry) { - return getDynamicPackagesEntryIntro( - id, - dynamicRequireModuleDirPaths, - dynamicRequireModuleSet - ); - } - return null; }, diff --git a/packages/commonjs/src/transform.js b/packages/commonjs/src/transform.js index db8cc18f4..bf275796d 100644 --- a/packages/commonjs/src/transform.js +++ b/packages/commonjs/src/transform.js @@ -244,7 +244,7 @@ export function transformCommonjs( } if (isDynamicRegister || !isDynamic || sourceId.endsWith('.json')) { - sources.push([sourceId, !isDynamicRegister]); + sources.push([sourceId, isDynamicRegister]); } required[sourceId] = { source: sourceId, name, importsDefault: false, isDynamic }; @@ -545,36 +545,42 @@ export function transformCommonjs( } }); + // If `isEsModule` is on, it means it has ES6 import/export statements, + // which just can't be wrapped in a function. + if (isEsModule) shouldWrap = false; + + usesCommonjsHelpers = usesCommonjsHelpers || shouldWrap; + if ( !sources.length && !uses.module && !uses.exports && !uses.require && + !usesCommonjsHelpers && (ignoreGlobal || !uses.global) ) { // not a CommonJS module return null; } - // If `isEsModule` is on, it means it has ES6 import/export statements, - // which just can't be wrapped in a function. - if (isEsModule) shouldWrap = false; - - usesCommonjsHelpers = usesCommonjsHelpers || shouldWrap; - const importBlock = `${(usesCommonjsHelpers ? [`import * as ${HELPERS_NAME} from '${HELPERS_ID}';`] : [] ) .concat( - sources.map( - ([source]) => - // import the actual module before the proxy, so that we know - // what kind of proxy to build - `import '${source}';` - ), + // dynamic registers first (`commonjsRegister(,,,)`), as the may be required in the other modules + sources + .filter(([, isDynamicRegister]) => isDynamicRegister) + .map(([source]) => `import '${source}';`), + + // now the solid modules, non-commonjsRegister + sources + .filter(([, isDynamicRegister]) => !isDynamicRegister) + .map(([source]) => `import '${source}';`), + + // now the proxies for solid modules (non-commonjsRegister) sources - .filter(([, importProxy]) => importProxy) + .filter(([, isDynamicRegister]) => !isDynamicRegister) .map(([source]) => { const { name, importsDefault } = required[source]; return `import ${importsDefault ? `${name} from ` : ``}'${ diff --git a/packages/commonjs/test/fixtures/function/dynamic-require-instances/package/main.js b/packages/commonjs/test/fixtures/function/dynamic-require-instances/package/main.js index 94793d1e1..1d080f6e9 100755 --- a/packages/commonjs/test/fixtures/function/dynamic-require-instances/package/main.js +++ b/packages/commonjs/test/fixtures/function/dynamic-require-instances/package/main.js @@ -1 +1 @@ -module.exorts = { name: 'package', value: null }; +module.exports = { name: 'package', value: null }; diff --git a/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/main.js b/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/main.js new file mode 100755 index 000000000..8adb18ef2 --- /dev/null +++ b/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/main.js @@ -0,0 +1 @@ +// will be actually be loaded by the custom loader diff --git a/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule1.js b/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule1.js new file mode 100755 index 000000000..3156afbff --- /dev/null +++ b/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule1.js @@ -0,0 +1,2 @@ +const fn = require('./submodule2'); +export default fn; diff --git a/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule2.js b/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule2.js new file mode 100755 index 000000000..f470282a9 --- /dev/null +++ b/packages/commonjs/test/fixtures/samples/dynamic-require-different-loader/submodule2.js @@ -0,0 +1,3 @@ +module.exports = function() { + return 'Hello there'; +}; diff --git a/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/importer.js b/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/importer.js new file mode 100755 index 000000000..e1b871582 --- /dev/null +++ b/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/importer.js @@ -0,0 +1 @@ +export default require('./submodule.js'); diff --git a/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/main.js b/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/main.js new file mode 100755 index 000000000..523e6c2dc --- /dev/null +++ b/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/main.js @@ -0,0 +1,5 @@ +/* eslint-disable import/no-dynamic-require, global-require */ + +import result from './importer.js'; + +t.is(result, 'submodule'); diff --git a/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/submodule.js b/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/submodule.js new file mode 100755 index 000000000..c285d34bc --- /dev/null +++ b/packages/commonjs/test/fixtures/samples/dynamic-require-es-mixed-helpers/submodule.js @@ -0,0 +1 @@ +module.exports = 'submodule'; diff --git a/packages/commonjs/test/snapshots/function.js.md b/packages/commonjs/test/snapshots/function.js.md index df9d83977..90242f534 100644 --- a/packages/commonjs/test/snapshots/function.js.md +++ b/packages/commonjs/test/snapshots/function.js.md @@ -1809,7 +1809,7 @@ Generated by [AVA](https://avajs.dev). });␊ ␊ commonjsRegister("/$$rollup_base$$/fixtures/function/dynamic-require-instances/package/main.js", function (module, exports) {␊ - module.exorts = { name: 'package', value: null };␊ + module.exports = { name: 'package', value: null };␊ ␊ });␊ ␊ diff --git a/packages/commonjs/test/snapshots/function.js.snap b/packages/commonjs/test/snapshots/function.js.snap index f159e63c2383e6265772bfb4236d0a361992b269..ff125fe049d0bce27b622ce88e90454beca2a7f1 100644 GIT binary patch literal 11042 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 Nu!13->kSy_{{uAGZ6W{w literal 12356 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 diff --git a/packages/commonjs/test/test.js b/packages/commonjs/test/test.js index 19cb9ac48..939b25faa 100644 --- a/packages/commonjs/test/test.js +++ b/packages/commonjs/test/test.js @@ -665,3 +665,44 @@ test('imports .cjs file extension by default', async (t) => { const code = await getCodeFromBundle(bundle); t.snapshot(code); }); + +test('registers dynamic requires when entry is from a different loader', async (t) => { + const bundle = await rollup({ + input: 'fixtures/samples/dynamic-require-different-loader/main.js', + plugins: [ + { + load(id) { + if (id === path.resolve('fixtures/samples/dynamic-require-different-loader/main.js')) { + return 'import submodule1 from "./submodule1"; export default submodule1();'; + } + return null; + } + }, + commonjs({ + dynamicRequireTargets: ['fixtures/samples/dynamic-require-different-loader/submodule2.js'], + transformMixedEsModules: true + }) + ] + }); + + t.is((await executeBundle(bundle, t)).exports, 'Hello there'); +}); + +test('transforms the es file with a `commonjsRequire` and no `require`s', async (t) => { + const bundle = await rollup({ + input: 'fixtures/samples/dynamic-require-es-mixed-helpers/main.js', + plugins: [ + commonjs({ + dynamicRequireTargets: ['fixtures/samples/dynamic-require-es-mixed-helpers/submodule.js'], + transformMixedEsModules: true + }) + ] + }); + + const code = await getCodeFromBundle(bundle); + + t.is( + /commonjsRequire\(["']\.\/submodule\.js/.test(code), + true + ); +});