首页 > 解决方案 > 如何在开发过程中在中央服务器上托管 single-spa 根配置和模块

问题描述

我一直在试验 single-spa 一段时间,并了解开发人员体验的基础知识。创建一个包裹,在唯一端口上启动纱线,添加对导入映射声明的引用,等等。挑战在于,随着我的根配置积累越来越多的模块,管理端口和导入映射开始变得乏味。我想要的是将这些模块发布到中央存储库并从那里加载它们(例如,http ://someserver.com/repository/moduleA/myorg-modulea.js等)。

我最近被介绍到 localstack 并开始考虑也许本地 S3 存储桶可以为此服务。我有一个配置,其中构建(纱线构建)会自动发布到在 localstack 上运行的 s3 存储桶。但是当我尝试从存储桶加载根配置 index.html 时,我收到以下 JS 错误:

Unable to resolve bare specifier '@myorg/root-config'

我可以通过 curl 访问每个包裹的 JS 文件和 root-config,所以我想这对于以相同方式使用的任何 http 服务器都是一个问题。我可以翻转根配置以使用标准的 webpack-dev-server(在端口 9000 上),它工作正常。所以我猜测生产构建如何解决这些模块与本地构建之间存在差异。

有没有人尝试过这样的事情并让它工作?

标签: localstacksingle-spa

解决方案


http-server通过将每个子 .js 文件添加到 root-config 目录中的子文件夹并在 root-config 目录级别启动 Web 服务器,我遇到了类似的问题。

"imports": {
    "@myorg/root-config": "http://someserver.com/root-config.js",
    "@myorg/moduleA": "http://someserver.com/modules/moduleA/myorg-modulea.js",
    "@myorg/moduleB": "http://someserver.com/modules/moduleB/myorg-moduleb.js",
    "@myorg/moduleC": "http://someserver.com/modules/moduleC/myorg-modulec.js",
}

注意:默认情况下,Single-SPA 在当前导入映射之前有一个“isLocal”检查。如果使用生产版本,则需要删除它,否则它不会加载正确的映射。

<% if (isLocal) { %> 

就我而言,我使用的是 localhost 而不是 someserver,因此我可以导航到“存储库”文件夹并运行npx http-server以使一切正常运行。

我被挂断了一段时间,所以希望这能引导你朝着正确的方向前进。


推荐阅读