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

cai*_*lin 7 typescript webpack angular-cli angular object-hash

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

import * as objectHash from 'object-hash'

在我的一个组件文件的顶部,然后const hash = objectHash(obj)在我需要散列的任何地方执行。

我刚刚将我的项目升级到Angular 8,突然间,Angular 项目服务很好,但是当我运行生产构建时,我收到一个错误:Cannot read property 'crypto' of undefined.

这是因为 Angular 8 生成了不同的 JavaScript,为较新的浏览器<script type="module">和较旧的浏览器生成了一些包<script nomodule>。当脚本有 时type="module",显然this被区别对待 - 所以对象哈希库的引用this被破坏:https : //github.com/puleos/object-hash/issues/71

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

我看到的潜在解决方案是:

  • 以某种方式导入对象哈希

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

  • 让 Angular-CLI v8 停止生成差异化 JS 并吐出老式包(我还没有找到解决方案)
  • 降级到 Angular 7

lea*_*iro 4

提交1e0835c后,升级应该v2.0.1可以解决问题(请参阅报告问题中作者的评论)