Azure 地图控制导致 Angular 通用 SSR 错误

2024-04-09

我正在使用Azure 地图 Web 控制 https://www.npmjs.com/package/azure-maps-control与 Angular 11+ 一起使用。我可以在浏览器端创建地图的实例,没有任何问题:

html

<div class="map-target" #mapTarget></div>

code

  export class MapComponent implements AfterViewInit {
      @ViewChild('mapTarget') matTarget: ElementRef<HTMLElement> | undefined;

      map: Map | undefined;

      constructor(@Inject(PLATFORM_ID) private platformId: any) {}

      ngAfterViewInit(): void {
        if (isPlatformBrowser(this.platformId)) {
          this.map = new Map(this.matTarget?.nativeElement as HTMLElement, {
            center: [-118.270293, 34.039737],
            zoom: 14,
            view: 'Auto',
            authType: 'subscriptionKey',
            subscriptionKey: 'key-here',
          });
        }
      }
    }

我面临的问题是,每当 Azure Maps 类(Map、DrawingManager、Layers 等)的代码中包含构造函数调用时,它就会破坏 SSR 构建,并出现以下错误:

Error: Non-standard crypto library
at D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:150:794680
at i (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:150:794859)
at l (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:150:794925)
at D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:150:883579
at D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:150:22
at Object./0ki (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:150:43)
at __webpack_require__ (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:20:30)
at Module.cNoH (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:80114:76)
at __webpack_require__ (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:20:30)
at Module.Sy1n (D:\code\clients\beyond-key\dqt\temp\azure-maps-ssr-issue\dist\azure-maps-ssr-issue\server\main.js:71265:76)

这种情况的发生无需在 SSR 端执行代码(所有都是包装的平台检查)。

删除构造函数调用但保留所有其他引用“修复”了该问题。

我真的很想继续使用 Azure 地图,但目前这个问题使 Bing 地图成为我唯一的选择。还有其他人经历过类似的事情并找到了解决方法吗?我成功尝试的一件事是将地图创建移至仅包含在浏览器构建中的工厂。一旦事情变得清楚,这将需要对所有多边形、图钉等进行处理。这变得不可行。

回购协议可用here https://github.com/JayChase/azure-maps-ssr-issue重现问题。

git clone github.com/JayChase/azure-maps-ssr-issue
npm i
npm run dev:ssr

这与这两个线程类似:

https://github.com/WiredSolutions/react-azure-maps/issues/77 https://github.com/WiredSolutions/react-azure-maps/issues/77

https://feedback.azure.com/forums/909172-azure-maps/suggestions/41611411-nextjs-cannot-use-azure-map-control-as-package https://feedback.azure.com/forums/909172-azure-maps/suggestions/41611411-nextjs-cannot-use-azure-map-control-as-package

主要问题是:

“你不能使用地图作为服务器端渲染器 - 它需要客户端浏览器才能工作。”

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

Azure 地图控制导致 Angular 通用 SSR 错误 的相关文章

  • Angular4 - 滚动到锚点

    我正在尝试对同一页面上的锚元素进行简单的滚动 基本上 用户点击 尝试 按钮 它就会滚动到页面下方 ID 为 登录 的区域 现在 它正在与一个基本的id login a href login a 但它正在跳转到该部分 理想情况下 我希望它滚动
  • 如何测试包含自定义表单控件的组件?

    我有一个这样的组件 Component selector app custom form control templateUrl
  • Azure COSMOS DB 如何查询数组中的内容

    如何进行查询以获取文档数组 roles 中包含某些内容的文档 我想获取以下文档 其中 Trainer 是数组中的元素 enabled true profilePicture null roles Trainer Client SELECT
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • 如何显示 GroupList 的 FormArray?

    我正在尝试制作一个交互式表单 在每一行上列出一个项目以及一个删除按钮 在我的示例中称为 verwijderen 这些项目是从数据库中检索的 并且每个项目都实例化为名为的自定义对象LaborPeriod 然后这些对象被转化为FormGroup
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • Azure 发布包不包含所有文件

    我有几个配置 dll 和一个 exe 文件位于 bin 文件夹中并包含在项目中 文件设置为 内容 和 始终复制 当我在本地调试项目时 一切正常 问题是当我发布云服务时 文件丢失了 Azure 发布过程忽略了这些文件 并且部署包文件中也缺少这
  • 尝试了解天蓝色云服务中的负载平衡

    我正在维护一个天蓝色的云服务 它有 1 个 Web 角色和几个辅助角色 该网络角色有多个实例 当我从资源中打开云服务时 我可以看到服务端点和公共IP地址 我想了解这个蔚蓝云服务中的流量负载是如何平衡的 我搜索了负载均衡器 但在订阅中找不到它
  • 在 CosmosDb 中使用 /id 作为分区键的含义

    在每分钟有 1000 个条目 唯一键 进入 cosmos 的场景中 使用 id 作为分区键安全吗 特别是 有一个逻辑分区的概念https learn microsoft com en us azure cosmos db partition
  • 在 Angular 中获取当前路由路径名称的最简单方法是什么?

    我正在寻找一种获取当前路线的路径名称的好方法 这是我能找到的最简单的 this route snapshot firstChild url 0 path 有没有更好的办法 谢谢 谢谢大家的回答 这是我发现我必须做的 router event
  • Azure Graph API 身份验证_MissingOrMalformed

    我正在使用 Azure Graph API 从 Azure AD 导入用户 在天蓝色门户中 我添加了多个应用程序 我从 protal 获取 clientId tenantId 并创建一个有效期为一年的密钥 使用这些值 我创建一个 acces
  • Azure Application Insights 查询 - 如何计算总数的百分比

    我正在尝试在输出表中创建一行来计算总项目的百分比 Something like this ITEM COUNT PERCENTAGE item 1 4 80 item 2 1 20 我可以轻松获得包含 ITEM 和 COUNT 行的表格 但
  • Angular 2 重复标头

    使用时出现重复标头问题
  • 在azure中使用terraform为应用程序服务创建自动缩放规则时出错

    resource azurerm monitor autoscale setting test name AutoscaleSetting resource group name azurerm resource group main na
  • 使用服务中的可观察量测试错误情况

    假设我有一个订阅服务功能的组件 export class Component ngOnInit this service doStuff subscribe data IData gt doThings data error Error g
  • 观众:覆盖单个测试的提供者(角度通用)

    我构建了一个小型角度应用程序 现在正在编写单元测试 到目前为止一切顺利 但是当我尝试测试我的 authGuard 时 我遇到了一些问题 我在用观众 https github com ngneat spectator 我在规范的提供者部分中提
  • launch.json 中不允许使用属性 env [VSCode]

    我所做的就是在 VS 中初始化一个模板 Azure Functions 项目 当我尝试通过设置运行配置环境变量时launch json VS直接警告我这是不 允许的 此外 即使当我尝试运行我的 ps1无论如何 对于 env 来说 它不起作用
  • 使用 facebook 共享动态更新元标签 - Angular 6

    我需要动态更新元标记 如 og title og description 和 og image 并在 facebook 上共享相同的内容 我已经尝试了所有方法 但没有任何效果 首先 我尝试使用 javascript 设置元标记 如下所示 v
  • WCF 服务中的“即发即忘”

    我在 Azure 上有很多 WCF REST 服务 在某些 WCF 服务中 我向外部服务调用 Http 请求 例如发送电子邮件 短信 对非关键第三方服务的 http 请求 我不希望这阻碍我对客户电话的响应 需要一些关于在这种情况下使用的模式

随机推荐