fix(enhanced): implement getSourceBasicTypes for ConsumeSharedModule#4563
Conversation
Webpack 5.105.4 introduced `Module#getSourceBasicTypes()` and added a JavaScript-only filter inside ModuleConcatenationPlugin. `@module-federation/enhanced`'s ConsumeSharedModule only defined `getSourceTypes()` (returning `consume-shared`), which causes `getSourceBasicTypes()` to fall back to the wrong set and breaks scope hoisting / re-export target resolution. This change adds `getSourceBasicTypes()` returning `new Set(["javascript"])`, matching webpack core's ConsumeSharedModule behavior, and adds a focused unit test. Refs: module-federation#4559 Co-Authored-By: Aime <aime@bytedance.com> Change-Id: Ic62a58c908d85b3152f8de6cdb96d903573f8be9
|
✅ Deploy Preview for module-federation-docs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
@module-federation/devtools
@module-federation/cli
create-module-federation
@module-federation/data-prefetch
@module-federation/dts-plugin
@module-federation/enhanced
@module-federation/error-codes
@module-federation/esbuild
@module-federation/managers
@module-federation/manifest
@module-federation/metro
@module-federation/metro-plugin-rnc-cli
@module-federation/metro-plugin-rnef
@module-federation/modern-js
@module-federation/modern-js-v3
@module-federation/native-federation-tests
@module-federation/native-federation-typescript
@module-federation/nextjs-mf
@module-federation/node
@module-federation/retry-plugin
@module-federation/rsbuild-plugin
@module-federation/rspack
@module-federation/rspress-plugin
@module-federation/runtime
@module-federation/runtime-core
@module-federation/runtime-tools
@module-federation/sdk
@module-federation/storybook-addon
@module-federation/third-party-dts-extractor
@module-federation/treeshake-frontend
@module-federation/treeshake-server
@module-federation/typescript
@module-federation/utilities
@module-federation/webpack-bundler-runtime
@module-federation/bridge-react
@module-federation/bridge-react-webpack-plugin
@module-federation/bridge-shared
@module-federation/bridge-vue3
@module-federation/inject-external-runtime-core-plugin
commit: |
Bundle Size Report10 package(s) changed, 30 unchanged. Package dist + ESM entry
Bundle targets
Consumer scenarios
Total dist (raw): 6.31 MB (+425 B (+0.0%)) Bundle sizes are generated with rslib (Rspack). Package-root metrics preserve the historical report. Tracked subpath exports such as |
Implements `RemoteModule.getSourceBasicTypes()` in `@module-federation/enhanced`, mirroring Webpack PR #20546 behavior to keep module source-type filtering consistent with newer Webpack internals. Validation: - `pnpm --filter @module-federation/enhanced run build` Co-Authored-By: Aime <aime@bytedance.com> Change-Id: I0120d6c755e73c6dd1bbe6bd15af93a1641c2c60
- Update ConsumeSharedModule#getSourceBasicTypes to be declared with `override` keyword - Keep method body unchanged and align with other overridden methods in the same class - Verified build with `pnpm --filter @module-federation/enhanced run build` Co-Authored-By: Aime <aime@bytedance.com> Change-Id: I3cc9f3e9e82d740211cf7973bf56a9d9d5851ec5
Context
Webpack 5.105.4 introduced
Module#getSourceBasicTypes()(webpack/webpack#20546) and updatedModuleConcatenationPlugin/ConcatenatedModule.findTarget()to use it as the canonical filter for detecting whether a module produces JavaScript output.Two modules in
@module-federation/enhancedwere affected:ConsumeSharedModule:getSourceTypes()returns["consume-shared"], a non-basic type. Without overridinggetSourceBasicTypes(), it gets treated as non-JS and filtered out during scope hoisting.RemoteModule:getSourceTypes()returns["remote", "share-init"], also non-basic types. Same issue applies — it would be incorrectly excluded from JS-only optimisation paths.Both modules produce JavaScript output, so their
getSourceBasicTypes()should correctly returnSet(["javascript"]).What changed
getSourceBasicTypes()topackages/enhanced/src/lib/sharing/ConsumeSharedModule.ts, returningSet(["javascript"]).getSourceBasicTypes()topackages/enhanced/src/lib/container/RemoteModule.ts, returningSet(["javascript"]).Why
This restores compatibility with Webpack 5.105.4+ while remaining safe for older webpack versions (the method is simply ignored by older runtimes).
Validation
pnpm install --frozen-lockfilepnpm --filter @module-federation/enhanced run buildReference
Closes #4559