You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

create-single-spa搭建的Typescript应用无法加载Rollup构建的React组件库

报错解决方案

你遇到的报错如下:

Uncaught Error: application '@org/test' died in status LOADING_SOURCE_CODE: Error loading http://localhost:8500/org-test.js (SystemJS Error#3) at HTMLScriptElement. (system.js:640)

该报错核心原因是single-spa默认依赖SystemJS加载外部模块,你的Rollup打包的组件库输出格式、导入映射规则和create-react-app的默认webpack加载逻辑不兼容,因此在CRA中运行正常,在single-spa应用中加载失败,可按以下方案解决:


方案1:适配SystemJS加载规则(适合组件库作为远程共享模块使用的场景)

  • 第一步:修改组件库的Rollup打包配置,输出SystemJS兼容格式,同时external掉react、react-dom等公共依赖,避免重复打包。配置示例:
// rollup.config.js
export default {
  input: 'src/index.ts',
  external: ['react', 'react-dom'], // 所有peerDependencies都要列在这里
  output: [
    {
      format: 'system', // 核心配置:输出system格式
      dir: 'dist',
      entryFileNames: 'index.system.js',
      name: '@org/your-component-lib', // 和你导入时的组件库模块名保持一致
    }
  ],
  // 原有plugins配置保持不变,保留ts、babel等处理逻辑即可
}
  • 第二步:调整组件库本地开发服务的跨域配置,避免跨域拦截SystemJS的加载请求。如果用http-server启动组件库服务,命令改为:
http-server dist --cors -p 你的组件库服务端口
  • 第三步:在single-spa根应用的导入映射(importmap)中添加组件库的地址映射,确保SystemJS能找到正确的加载路径:
<!-- 根应用的index.html -->
<script type="systemjs-importmap">
{
  "imports": {
    "@org/your-component-lib": "http://localhost:你的组件库服务端口/index.system.js"
  }
}
</script>
  • 第四步:在测试应用@org/test的webpack配置中,将组件库设为external,避免重复打包进应用代码:
// @org/test 应用的webpack.config.js
module.exports = {
  externals: ['@org/your-component-lib']
}

方案2:直接打包进应用(快速验证场景)

如果你不需要把组件库作为公共共享模块使用,只是要在测试应用里验证功能,可以直接修改测试应用的webpack配置,移除组件库的external规则,让webpack直接把组件库代码打包进应用,和CRA的加载逻辑保持一致,即可直接复现CRA中的正常运行效果。


额外检查项

  • 确认组件库的package.json中main/module字段指向正确的打包输出文件
  • 确认Typescript配置中moduleResolution设置为bundler或NodeNext,避免编译时找不到模块的问题

内容的提问来源于stack exchange,提问作者Danilo Risme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:27:02