diff --git a/.changeset/chilled-pillows-joke.md b/.changeset/chilled-pillows-joke.md new file mode 100644 index 00000000..7c379b41 --- /dev/null +++ b/.changeset/chilled-pillows-joke.md @@ -0,0 +1,5 @@ +--- +'@ice/pkg': minor +--- + +feat: umd format will enable inlineDynamicImports diff --git a/packages/pkg/src/engine/shared/outputs.ts b/packages/pkg/src/engine/shared/outputs.ts index 7ebcf99b..f77c7632 100644 --- a/packages/pkg/src/engine/shared/outputs.ts +++ b/packages/pkg/src/engine/shared/outputs.ts @@ -77,11 +77,16 @@ export function getOutputs({ if (minify) { options.plugins = [minifyPlugin(bundleTaskConfig.sourcemap, typeof minify === 'boolean' ? {} : minify.options)]; } + options.inlineDynamicImports = format.module === 'umd'; } else if (engine === 'rolldown') { const rolldownOuptut = options as RolldownOutputOptions; if (minify) { rolldownOuptut.minify = typeof minify === 'boolean' ? minify : minify.options; } + // rolldown can auto handle umd format to disable codeSplitting + // if (format.module === 'umd') { + // rolldownOuptut.codeSplitting = false + // } } return options; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index def8f98d..49c3bc6f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -611,6 +611,9 @@ importers: '@ice/pkg': specifier: workspace:* version: link:../../../packages/pkg + '@swc/helpers': + specifier: ^0.5.15 + version: 0.5.17 es-toolkit: specifier: ^1.32.0 version: 1.32.0 diff --git a/tests/integration/bundle-dep/__snapshots__/index.test.ts.snap b/tests/integration/bundle-dep/__snapshots__/index.test.ts.snap index c8ca6f6a..e94c0080 100644 --- a/tests/integration/bundle-dep/__snapshots__/index.test.ts.snap +++ b/tests/integration/bundle-dep/__snapshots__/index.test.ts.snap @@ -56,3 +56,71 @@ exports[`Run config default-venders > dist structure 1`] = ` "name": "dist", } `; + +exports[`Run config dynamic-import > dist structure 1`] = ` +{ + "files": [ + { + "name": "dynamic-import.umd.es5.production.js", + }, + ], + "name": "dist", +} +`; + +exports[`Run config dynamic-import-pkg > dist structure 1`] = ` +{ + "files": [ + { + "name": "dynamic-import.cjs.es5.production.js", + }, + { + "name": "dynamic-import.esm.es5.production.js", + }, + { + "name": "dynamic-import.umd.es5.production.js", + }, + { + "name": "vendor.cjs.es5.production.js", + }, + { + "name": "vendor.esm.es5.production.js", + }, + ], + "name": "dist", +} +`; + +exports[`Run config dynamic-import-pkg-rolldown > dist structure 1`] = ` +{ + "files": [ + { + "name": "dynamic-import.cjs.es5.production.js", + }, + { + "name": "dynamic-import.esm.es5.production.js", + }, + { + "name": "dynamic-import.umd.es5.production.js", + }, + { + "name": "vendor.cjs.es5.production.js", + }, + { + "name": "vendor.esm.es5.production.js", + }, + ], + "name": "dist", +} +`; + +exports[`Run config dynamic-import-rolldown > dist structure 1`] = ` +{ + "files": [ + { + "name": "dynamic-import.umd.es5.production.js", + }, + ], + "name": "dist", +} +`; diff --git a/tests/integration/bundle-dep/index.test.ts b/tests/integration/bundle-dep/index.test.ts index faf70897..010275e8 100644 --- a/tests/integration/bundle-dep/index.test.ts +++ b/tests/integration/bundle-dep/index.test.ts @@ -46,6 +46,43 @@ const tests: ProjectTestUserConfig[] = [ ], }, }, + // should inlineDynamicImport for umd + { + name: 'dynamic-import', + config: { + entry: './src/dynamic-import.ts', + bundle: { + // rollup has error when using umd and cjs in same instance + // https://github.com/rollup/rollup/issues/6296 + formats: ['umd'], + }, + }, + engine: ['rollup', 'rolldown'], + }, + { + name: 'dynamic-import-pkg', + config: { + entry: './src/dynamic-import.ts', + pkgs: [ + { + module: 'esm', + target: 'es5', + bundle: true, + }, + { + module: 'cjs', + target: 'es5', + bundle: true, + }, + { + module: 'umd', + target: 'es5', + bundle: true, + }, + ], + }, + engine: ['rollup', 'rolldown'], + }, ]; runProjectTest( diff --git a/tests/integration/bundle-dep/package.json b/tests/integration/bundle-dep/package.json index 3ba0a6d7..3d9d45e7 100644 --- a/tests/integration/bundle-dep/package.json +++ b/tests/integration/bundle-dep/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@ice/pkg": "workspace:*", + "@swc/helpers": "^0.5.15", "es-toolkit": "^1.32.0" } } diff --git a/tests/integration/bundle-dep/src/dynamic-import.ts b/tests/integration/bundle-dep/src/dynamic-import.ts new file mode 100644 index 00000000..849a88ba --- /dev/null +++ b/tests/integration/bundle-dep/src/dynamic-import.ts @@ -0,0 +1,4 @@ +export async function load() { + const { merge } = await import('es-toolkit'); + return merge; +}