-
Notifications
You must be signed in to change notification settings - Fork 153
Open
Description
Could someone share their experience of sharing Angular deps between several single-spa applications?
I made a recommended setup like in this repo: https://github.com/polyglot-microfrontends/shared-dependencies
It works for some libs but doesn't work for Angular.
What I've done for the moment:
- Additional set of imports for the root application:
{
"imports": {
"single-spa": "https://cdn.jsdelivr.net/npm/single-spa@5.0.0-beta.1/lib/system/single-spa.min.js",
"single-spa-angular": "https://cdn.jsdelivr.net/npm/single-spa-angular@3.1.0/lib/browser-lib/single-spa-angular.min.js",
"zone.js": "https://cdn.jsdelivr.net/npm/zone.js@0.9.1/dist/zone.min.js",
"rxjs": "https://unpkg.com/@esm-bundle/rxjs/system/rxjs.min.js",
"rxjs/operators": "https://unpkg.com/@esm-bundle/rxjs/system/rxjs-operators.min.js",
"@angular/core": "https://cdn.jsdelivr.net/npm/@angular/core@8.2.14/bundles/core.umd.js",
"@angular/common": "https://cdn.jsdelivr.net/npm/@angular/common@8.2.14/bundles/common.umd.min.js",
"@angular/compiler": "https://cdn.jsdelivr.net/npm/@angular/compiler@8.2.14/bundles/compiler.umd.js",
"@angular/forms": "https://cdn.jsdelivr.net/npm/@angular/forms@8.2.14/bundles/forms.umd.min.js",
"@angular/platform-browser": "https://cdn.jsdelivr.net/npm/@angular/platform-browser@8.2.14/bundles/platform-browser.umd.min.js",
"@angular/platform-browser-dynamic": "https://cdn.jsdelivr.net/npm/@angular/platform-browser-dynamic@8.2.14/bundles/platform-browser-dynamic.umd.min.js",
"@angular/animations": "https://cdn.jsdelivr.net/npm/@angular/animations@8.2.14/bundles/animations.umd.min.js",
"@angular/router": "https://cdn.jsdelivr.net/npm/@angular/router@8.2.14/bundles/router.umd.min.js",
"moment": "https://cdn.jsdelivr.net/npm/moment@2.24.0/moment.min.js"
}
}
- Added externals to the extra-webpack-config.js
const singleSpaAngularWebpack = require('single-spa-angular/lib/webpack').default;
const webpackMerge = require("webpack-merge");
module.exports = (angularWebpackConfig, options) => {
const singleSpaWebpackConfig = singleSpaAngularWebpack(angularWebpackConfig, options);
const externalsConfig = {
externals: {
'zone.js': 'Zone',
"rxjs": "rxjs",
'moment': 'moment',
"@angular/core": "@angular/core",
"@angular/common": "@angular/common",
"@angular/compiler": "@angular/compiler",
"@angular/forms": "@angular/forms",
"@angular/platform-browser": "@angular/platform-browser",
"@angular/platform-browser-dynamic": "@angular/platform-browser-dynamic",
"@angular/animations": "@angular/animations",
"@angular/router": "@angular/router"
},
};
const mergedConfig = webpackMerge.smart(singleSpaWebpackConfig, externalsConfig);
console.log(mergedConfig);
return mergedConfig;
}
It works fine for dependencies except of @angular/*
On application loading I see:
Metadata
Metadata
Assignees
Labels
No labels
