在Angular 8项目中使用对象哈希会导致“无法读取未定义的属性'crypto'”错误

问题描述 投票:4回答:2

我有一个Angular-CLI项目,该项目利用object-hash库从对象创建哈希。通常我会把

import * as objectHash from 'object-hash'

在我的一个组件文件的顶部,然后在需要哈希的任何地方进行const hash = objectHash(obj)

我刚刚将项目升级到Angular 8,突然,Angular项目serves >>很好,但是当我运行生产版本时,出现错误:Cannot read property 'crypto' of undefined

这是因为Angular 8生成了差异JavaScript

,从而为较新的浏览器(如<script type="module">)和较旧的浏览器(如<script nomodule>)生成了一些捆绑软件。当脚本具有type="module"时,显然this的处理方式有所不同-因此object-hash库对this的引用已损坏:https://github.com/puleos/object-hash/issues/71

有人对我如何解决这个问题有任何见解吗?

我看到的可能的解决方案是:

  • 以某种方式导入object-hash

  • 使用与浏览器兼容的完全不同的对象哈希库(我还没有找到)

  • 获取Angular-CLI v8以停止生成差异JS并只吐出老式捆绑包(我还没有找到解决方案一个)
  • 降级到Angular 7

我有一个Angular-CLI项目,该项目利用对象哈希库从对象创建哈希。通常我会把import * as objectHash从'object-hash'放在我其中一个的顶部...

angular typescript webpack angular-cli object-hash
2个回答
0
投票

我认为最简单的方法是使用您提到的issue中的自定义Webpack配置,因为它是构建阶段的问题,而不是运行时的问题。如我所见,棱角分明的核心成员不会很快解决此问题。


0
投票

提交@angular-builders/custom-webpack后,将1e0835c升级到应该可以解决问题(请参见所报告的问题中的v2.0.1

© www.soinside.com 2019 - 2024. All rights reserved.