Update Webpack Config to Use Dynamic Shared Entries
In OneCX v6, the shared entries in webpack.config.js should no longer be hardcoded.
Shared configuration can instead be generated dynamically using getOneCXSharedRecommendations from @onecx/accelerator, based on the dependencies declared in package.json.
Update webpack.config.js
-
getOneCXSharedRecommendationsfrom@onecx/acceleratoranddependenciesfrom./package.jsonshould be imported. -
The hardcoded
share({…})entries should be replaced with a loop overObject.keys(dependencies). For each dependency,getOneCXSharedRecommendations(libName, { requiredVersion: 'auto', includeSecondaries: true })should be called. If the result is notfalse, the entry should be added to thesharedEntriesobject. -
sharedEntriesshould be passed toshare(sharedEntries)instead of the hardcoded object.
Example
const { share, withModuleFederationPlugin } = require('@angular-architects/module-federation/webpack');
const config = withModuleFederationPlugin({
// ...
shared: share({
'@angular/core': { requiredVersion: 'auto', includeSecondaries: true },
'@onecx/angular-accelerator': { requiredVersion: 'auto', includeSecondaries: true },
'primeng': { requiredVersion: 'auto', includeSecondaries: true },
// ... more hardcoded entries for every dependency
}),
sharedMappings: ['@onecx/portal-integration-angular'],
});
const { share, withModuleFederationPlugin } = require('@angular-architects/module-federation/webpack');
const { getOneCXSharedRecommendations } = require('@onecx/accelerator')
const { dependencies } = require('./package.json')
const sharedEntries = {}
for (const libName of Object.keys(dependencies)) {
const result = getOneCXSharedRecommendations(libName, { requiredVersion: 'auto', includeSecondaries: true })
if (result !== false) {
sharedEntries[libName] = result
}
}
const config = withModuleFederationPlugin({
// ...
shared: share(sharedEntries),
sharedMappings: ['@onecx/portal-integration-angular'],
});