共享模块无法立即使用 - Angular 13

2024-01-04

我读过其他答案,但没有成功地使用 Angular 13 实现联合模块。我总是收到“共享模块不可用于急切消费”的消息。

TL;DR:

  1. 仔细检查自定义 webpack 配置中的公共路径 - 它可能缺少尾随/WebPack 可能会错误地报告为“无法立即使用”。
  2. 检查路由 - 您的 MFE/远程模块将接收子路由after主机模块的路由(因此,如果您的主机在点击路由“登录”时路由到 MFE,则您的 MFE 将not获取“登录”路径,它将得到一个空路径(请参阅下面的更新 2)。
  3. 可能需要(也可能不需要)引导(下面的更新 1)。

主机应用程序 webpack.config.ts:

export const webpackConfig: Configuration = {
  output: {
    publicPath: 'http://localhost:4200',
    uniqueName: 'host',
  },
  plugins: {
    new container.ModuleFederationPlugin({
      name: "host",
      remotes: {
        "remote-login": "login@http://localhost:4201/remoteEntry.js"
      }
      shared: [
        "@angular/core",
        "@angular/common",
        "@angular/router",
        "@angular/common/http",
      ]
    })
  ]
}

export default webpackConfig;

远程应用程序:

export const webpackConfig: Configuration = {
  output: {
    publicPath: 'http://localhost:4201',
  },
  optimization: { runtimeChunk: false },
  experiments: { outputModule: true },
  plugins: {
    new container.ModuleFederationPlugin({
      name: "login",
      filename: "remoteEntry.js",
      exposes: {
        LoginComponent: './projects/module1/src/app/pages/login/login.component.ts',
      },
      shared: [
        "@angular/core",
        "@angular/common",
        "@angular/router",
        "@angular/common/http",
      ]
    })
  ]
}

export default webpackConfig;

更新1:

我尝试过使用“引导”文件。使用这个在main.ts file: import('bootstrap').catch(err => console.error(err))现在在控制台中看到以下错误 - 该错误似乎仅与新的引导进程相关:ChunkLoadError: Loading chunk projects_host_src_bootstrap_ts failed.

_注意:此错误是因为 webpack.config.ts 中定义的公共路径缺少尾部斜杠。引导它尝试从以下位置加载块http://localhost:4200projets_host_src_bootstrap_ts(缺少/端口号之后)。

更新2:

我现在得到Error: ASSERTION ERROR: NgModule 'LoginComponent' is not a subtype of NgModuleType.所以至少我又回到了“角度误差之地”。

我必须将 LoginModule(LoginComponent 的主页)中的路由设置为:

export const routes: Routes = [
  {
    path: '', //Note: empty path, _not_ matching the app's 'login' path
    loadChildren: () => import('./login/login.component').then(m => m.LoginComponent),
  }
]

更新3:正在运行

因此,我将 MFE(LoginModule)路由更改为非惰性路由,并且成功了!

export const routes: Routes = [
  {
    path: '', //Note: empty path, _not_ matching the app's 'login' path
    component: LoginComponent,
  }
]

我将回滚引导更改并查看是否需要它们,但现在至少使用联合模块!


对于原始错误消息,有一个关于此特定错误的 Webpack 文档 https://webpack.js.org/concepts/module-federation/#uncaught-error-shared-module-is-not-available-for-eager-consumption.

简而言之,您需要一个异步边界(这是由文件的存在创建的)bootstrap.js + index.js)确保在客户端加载时等待共享依赖项:

index.js:

import('./bootstrap.js');

bootstrap.js:

import React from 'react';

// ... the rest of application root component

您还可以添加eager: true添加到共享依赖项,但这会将它们添加到初始块中,无论是否使用它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

共享模块无法立即使用 - Angular 13 的相关文章

随机推荐

  • 切换仅包含相同文本的 div

    HTML div class event div class clicker click div div class title a href first event a div div div class event div class
  • 检索 Facebook 粉丝姓名

    我正在尝试获取我管理的 Facebook 粉丝页面的粉丝姓名 我做了一些窥探 显然 FB API 不支持这一点 但 Facebook 实际上使用 AJAX JSON 来填充列表 无论如何 任何人都可以建议一种方法来让我自己调用并以纯文本形式
  • 超小屏幕上的居中按钮 Material-UI React 不起作用(justify-xs-center)

    我尝试了一切 但似乎我错过了一些东西 当屏幕特别小时 我花了很多时间在网格内制作一个按钮中心 这段代码工作完美 但问题是我希望我的按钮仅在屏幕特别小时而不是在所有尺寸上居中 工作代码 Grid item xs 12 gt
  • 不显示python OpenCV错误

    我正在使用 OpenCV 和 python 更具体地说findTransformECC的功能cv2执行图像配准 如果算法不收敛 此函数可能会引发错误 我用一个简单的方法捕获了错误try except指令 然后我处理错误 但是 OpenCV
  • 在 Swing 中使用计时器显示图片 5 秒

    我正在尝试使用以下方法为我的应用程序制作登录图片Timer 这个想法是 当用户打开应用程序时 他将看到一张图片 5 秒钟 然后应用程序将启动 我尝试过 正如你在方法中看到的shoutoff To change this license he
  • Facebook 的 Android ProGuard 设置

    我终于找到了为什么我的应用程序崩溃而构建的发布 ProGuard 确实从我的应用程序中剥离了代码 但我通过在 proguard android txt 在 sdk 中找到 中使用 keep 命令手动添加类来阻止这种情况 对于 Faceboo
  • 如何使用 NEST 在 Elasticsearch 中按索引获取所有文档?

    我想通过索引获取所有文档 我已经尝试过以下方法 var response client Search s gt s Index test MatchAll 响应返回 成功操作 但它没有命中任何文档 尽管该索引下有很多文档 To get al
  • npm 在 eslint 报告末尾抛出错误

    我在打字稿项目上运行 eslint 时遇到问题 我有以下 package json 我在其中编写了一个运行 eslint 的脚本 name ts tutorial version 1 0 0 description main index j
  • AngularJS中触发输入文件点击事件

    我正在尝试模拟 AngularJS 中文件输入的单击事件 我见过工作 jQuery 示例 http jsfiddle net fEBFp 1 但我不想使用 jQuery use strict angular module MyApp con
  • type_info 不考虑简历限定符:这是对的吗?

    此代码打印 1 是正确的行为还是 g 4 5 的怪癖 include
  • 共享库构造函数不工作

    在我的共享库中 我必须在加载时进行某些初始化 如果我用 GCC 属性定义函数 attribute constructor 它不起作用 即当加载链接我的共享库的程序时它不会被调用 如果我将函数名称更改为 init 有用 显然使用 init a
  • Android 框架布局点击侦听器不起作用

    我有一个FrameLayout有两个嵌套LinearLayouts 我想要一个onClickListener for FrameLayout 经过搜索我得到了解决方案clickable false 这是我的布局文件
  • 有没有一种简单的方法可以将所有 jar 依赖项复制到 XSBT 0.11.2 中的某个目录?

    当从旧版本的 SBT 切换到最新版本时 我们失去了快速获取所有 jar 依赖项并将它们复制到目录的能力 有没有一种简单的方法可以在 XSBT 0 11 2 中执行相同的操作 将以下内容添加到您的build sbt将所有依赖项复制到lib m
  • 无法在 Symfony 2 中使用渲染方法找到 Twig 模板

    我在尝试引用特定 Twig 模板时遇到问题 我正在使用render方法是 SF2 主控制器的一部分 但我显然没有正确引用 使用它 这是我的目录 文件结构 src AyrshireMinis CommonBundle Controller D
  • 如何根据用户输入退出 while(1) ?

    我有一个简单的server client终端 服务器从客户端接收字符串并对其进行处理 服务器只有收到后才会开始处理end of input在我的例子中的角色是 下面的 while 循环旨在允许用户输入多个不同的字符串 并且应该在接收到时停止
  • C 数组到 PyArray

    我正在编写一个 Python C 扩展 而不使用 Cython 我想在 C 中分配一个双精度数组 在内部函数 恰好在 Fortran 中 中使用它并返回它 我指出 C Fortran 接口在 C 中运行得很好 static PyObject
  • 时间序列分析 - 不均匀间隔的度量 - pandas + statsmodels

    我有两个 numpy 数组 light points 和 time points 想对这些数据使用一些时间序列分析方法 然后我尝试了这个 import statsmodels api as sm import pandas as pd td
  • 一对多关系中的 Django 查询

    我有 2 个表 Order 和 OrderDetails 在 OrderDetails 上我有一个字段 product type 我想从 Order 表中获取列表中的所有 Product type 字段 Order objects filt
  • Visual Studios 2010 - Asp.net MVC 4 Beta - 粘贴长时间延迟且频繁崩溃

    嘿各位开发人员 免责声明 在这被标记为高天之前 我意识到 asp net mvc 4 版本是 Beta 我并不期望完美 但该版本是全新的 所以实际上没有太多用户信息 我可以找到 讨论 IDE 问题 问题 我安装了 Asp net MVC 4
  • 共享模块无法立即使用 - Angular 13

    我读过其他答案 但没有成功地使用 Angular 13 实现联合模块 我总是收到 共享模块不可用于急切消费 的消息 TL DR 仔细检查自定义 webpack 配置中的公共路径 它可能缺少尾随 WebPack 可能会错误地报告为 无法立即使