我还在玩弄东西,但我可以分享我们所做的事情。首先,我们创建一个单独的配置来映射不同的 url:
federationRemotes.json:
{
"app1": {
"prod": "https://app1.domain.com/remoteEntry.js",
"stage": "https://app1-stage.domain.com/remoteEntry.js",
"local": "http://localhost:3000/remoteEntry.js"
},
"app2": {
"prod": "https://app2.domain.com/remoteEntry.js",
"stage": "https://app2-stage.domain.com/remoteEntry.js",
"local": "http://localhost:3000/remoteEntry.js"
}
}
function getFederationRemotes() {
const remotes = {}
const federationRemotes = require('./federationRemotes.json')
Object.keys(federationRemotes).forEach(remote => {
const localUrl = (federationRemotes[remote]['local'] || federationRemotes[remote]['stage'])
remotes[remote] = productionMode ? `${remote}@___FEDERATION_PLACEHOLDER_${remote}___` : `${remote}@${localUrl}`
});
return remotes;
}
然后在插件中我们将遥控器配置为:
new ModuleFederationPlugin({
remotes: getFederationRemotes()
}
在本地开发期间,如果已定义,我们要么指向本地远程,要么默认为我们的暂存环境。
然后,我们有一些脚本可以___FEDERATION_PLACEHOLDER_${remote}___
在 CI/CD 部署构建期间替换它们。
您的需求可能不完全相同,因此您可以在这里和那里稍微调整一下。但是在外部配置中管理远程 url 到环境的映射并使用函数来读取它们并以通用方式替换它们,使我们更容易管理。