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

NX工作区动态Angular MFE(独立API)中NGX-translate远程资产加载问题

在NX动态Angular MFE(独立API)中解决ngx-translate远程应用无法加载自身i18n资产的问题

问题背景

我在配置为动态Angular MFE(独立API)的NX工作区中使用ngx-translate库,目标是打造一个可构建的shared-assets库,同时让每个应用拥有独立的assets/i18n目录。

目前已实现:

  • shared-assets库的资产可对外暴露
  • Shell应用能获取自身资产(apps/shell/assets/i18n)和shared-assets库中的资产(libs/shared-assets/src/assets/i18n),并已通过网络请求面板验证

遇到的问题:访问远程应用时,该应用无法获取自身的assets/i18n资产。

当前配置

Shell应用的bootstrap.ts

export function httpLoaderFactory(http: HttpBackend) {
  return new MultiTranslateHttpLoader(http, [
    { prefix: '/assets/i18n/core/', suffix: '.json' },
    { prefix: '/assets/i18n/', suffix: '.json' },
  ]);
}

bootstrapApplication(AppComponent, {
  providers: [
    importProvidersFrom(BrowserModule),
    provideHttpClient(),
    importProvidersFrom([BrowserAnimationsModule]),
    provideRouter(appRoutes, withEnabledBlockingInitialNavigation()),
    importProvidersFrom(
      TranslateModule.forRoot({
        loader: {
          provide: TranslateLoader,
          useFactory: httpLoaderFactory,
          deps: [HttpBackend],
        }
      })
    ),
  ],
}).catch((err) => console.error(err));

Shell应用的project.json(资产配置)

"assets": [
  "apps/shell/src/favicon.ico",
  "apps/shell/src/assets",
  {
    "input": "libs/shared-assets/src/assets/i18n",
    "glob": "**/*.json",
    "output": "assets/i18n/core"
  }
]

解决步骤

1. 配置远程应用的资产打包路径

修改远程应用的project.json,将自身assets/i18n资产打包到独立的命名空间路径,避免和其他应用资产冲突:

"assets": [
  "apps/remote-app/src/favicon.ico",
  {
    "input": "apps/remote-app/src/assets/i18n",
    "glob": "**/*.json",
    "output": "assets/i18n/remote-app" // 用远程应用名称作为专属子路径
  }
]

2. 远程应用单独配置ngx-translate加载器

在远程应用的bootstrap.ts中,配置专属的TranslateLoader,同时加载shared核心翻译和自身翻译文件:

export function remoteHttpLoaderFactory(http: HttpBackend) {
  return new MultiTranslateHttpLoader(http, [
    { prefix: '/assets/i18n/core/', suffix: '.json' }, // 加载shared核心翻译
    { prefix: '/assets/i18n/remote-app/', suffix: '.json' }, // 加载自身翻译文件
  ]);
}

bootstrapApplication(RemoteAppComponent, {
  providers: [
    importProvidersFrom(BrowserModule),
    provideHttpClient(),
    importProvidersFrom(TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: remoteHttpLoaderFactory,
        deps: [HttpBackend],
      }
    })),
    // 其他必要的providers
  ],
}).catch(err => console.error(err));

3. 确保MFE资产路由可访问

  • 检查远程应用project.json的build配置,确认资产输出路径正确
  • 部署时,将所有MFE的i18n资产放置在服务器的assets/i18n目录对应子路径下;本地开发时,可在Shell的proxy.conf.json中配置转发规则,将远程应用的资产请求指向其构建输出目录

4. 验证加载状态

启动应用后,在浏览器网络面板检查远程应用对应的/assets/i18n/remote-app/[lang].json请求状态,若返回404,核对打包路径和加载器配置的路径是否一致。

内容的提问来源于stack exchange,提问作者Arigui Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:50:08