diff --git a/src/common/webpack/config.ts b/src/common/webpack/config.ts index 1232d30..8dcab7d 100644 --- a/src/common/webpack/config.ts +++ b/src/common/webpack/config.ts @@ -51,6 +51,7 @@ import type {ForkTsCheckerWebpackPluginOptions} from 'fork-ts-checker-webpack-pl import type {moduleFederationPlugin} from '@module-federation/enhanced'; import {hasMFAssetsIsolation} from '../utils.js'; import {StatoscopePlugin} from './statoscope-plugin.js'; +import {getByDependencyResolveOptions} from './resolve.js'; const imagesSizeLimit = 2048; const fontSizeLimit = 8192; @@ -460,6 +461,7 @@ export function configureResolve({isEnvProduction, config}: HelperOptions) { extensions: ['.mjs', '.cjs', '.js', '.jsx', '.ts', '.tsx', '.json'], symlinks: config.symlinks, fallback: config.fallback, + byDependency: getByDependencyResolveOptions(config.bundler), } satisfies webpack.ResolveOptions; } diff --git a/src/common/webpack/resolve.test.ts b/src/common/webpack/resolve.test.ts new file mode 100644 index 0000000..76d19b0 --- /dev/null +++ b/src/common/webpack/resolve.test.ts @@ -0,0 +1,15 @@ +import {getByDependencyResolveOptions} from './resolve.js'; + +describe('dependency resolve configuration', () => { + it('enables import conditional exports for unknown Rspack dependencies', () => { + expect(getByDependencyResolveOptions('rspack')).toEqual({ + unknown: { + conditionNames: ['import', 'require', 'module', '...'], + }, + }); + }); + + it('keeps Webpack dependency conditions unchanged', () => { + expect(getByDependencyResolveOptions('webpack')).toBeUndefined(); + }); +}); diff --git a/src/common/webpack/resolve.ts b/src/common/webpack/resolve.ts new file mode 100644 index 0000000..72d9ef6 --- /dev/null +++ b/src/common/webpack/resolve.ts @@ -0,0 +1,13 @@ +import type {Bundler} from '../models/index.js'; + +export function getByDependencyResolveOptions(bundler: Bundler) { + if (bundler !== 'rspack') { + return undefined; + } + + return { + unknown: { + conditionNames: ['import', 'require', 'module', '...'], + }, + }; +}