【发布时间】:2019-12-13 16:13:36
【问题描述】:
我有一个任务。
拥有单水疗框架的微前端。
- 门户/主应用程序(通过 url 加载所有其他 js 代码)
- 微前端 1(基于反应)
- 微前端 2(基于反应)
所以我的问题只有一个:我不想复制供应商库,如 react、react-dom(任何其他)。我想让它们在其他微前端(与 webpack 捆绑)之间共享
我知道拥有一些全球性的东西是什么不好的做法(这违反了与 webpack 捆绑的整个想法)。但是如何解决厂商库的重复问题呢?
我发现一个解决方案只是使用 SystemJ 加载体面,例如 html 中的分隔标签,但我只是想知道是否还有另一种解决方案。
谢谢。
SystemJs 方法根据需求加载依赖项,但从 CDN,我只想做同样的事情,但从“共享”webpack 包加载所有依赖项,并使用 react 和其他东西。
window.SystemJS = window.System
function insertNewImportMap(newMapJSON) {
const newScript = document.createElement('script')
newScript.type = 'systemjs-importmap'
newScript.text = JSON.stringify(newMapJSON)
const allMaps = document.querySelectorAll('script[type="systemjs-importmap"]')
allMaps[allMaps.length - 1].insertAdjacentElement(
'afterEnd',
newScript
)
}
const devDependencies = {
imports: {
react: 'https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.development.js',
'react-dom': 'https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.development.js',
'react-dom/server': 'https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom-server.browser.development.js',
'single-spa': 'https://unpkg.com/single-spa@4.3.2/lib/umd/single-spa.min.js',
lodash: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js',
rxjs: 'https://unpkg.com/rxjs@6.4.0/bundles/rxjs.umd.js',
}
}
const prodDependencies = {
imports: {
react: 'https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js',
'react-dom': 'https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js',
'react-dom/server': 'https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom-server.browser.production.min.js',
'single-spa': 'https://unpkg.com/single-spa@4.3.2/lib/umd/single-spa.min.js',
lodash: 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js',
rxjs: 'https://unpkg.com/rxjs@6.4.0/bundles/rxjs.umd.min.js',
}
}
const devMode = true // you will need to figure out a way to use a set of production dependencies instead
if (devMode) {
insertNewImportMap(devDependencies)
} else {
insertNewImportMap(prodDependencies)
}
【问题讨论】:
-
意识到你想开发一个微前端。更新了您的标题和我的答案,以更多地关注这个具体主题。希望,它现在有帮助。
标签: reactjs webpack architecture microservices micro-frontend