升级到 Angular 8 后 d3.js 中的错误

Pat*_*sam 6 d3.js typescript angular angular8

我已将我的Angular 4应用程序更新为Angular 8。应用程序在开发构建中运行良好,但在生产构建中中断。加载应用程序时出现以下错误。

未捕获的类型错误:无法读取 d3.js:8 at Object../node_modules/d3/d3.js (d3.js:9554) at webpack_require (bootstrap:78) at Module../src/ 处未定义的属性“文档” app/pages/home/dashboard/map/map.component.ts (main-es2015.js:9841) at webpack_require (bootstrap:78) at Module../src/app/pages/home/home.routes.ts ( home.routes.ts:2) at webpack_require (bootstrap:78) at Module../src/app/pages/home/home.module.ts (home.event.bus.ts:5) at webpack_require (bootstrap:78) )

我的tsconfig.json文件看起来像这样。

{
  "compileOnSave": false,
  "compilerOptions": {
  "importHelpers": true,
  "outDir": "./dist/out-tsc",
  "baseUrl": "src",
  "sourceMap": true,
  "declaration": false,
  "moduleResolution": "node",
  "emitDecoratorMetadata": true,
  "experimentalDecorators": true,
  "target": "es2015",
  "typeRoots": [
    "node_modules/@types"
  ],
  "lib": [
    "es2016",
    "dom"
  ],
  "module": "esnext",
  "paths": {
    "core-js/es7/reflect": ["../node_modules/core-js/proposals/reflect- 
     metadata"],
    "core-js/es6/*": ["../node_modules/core-js/es/*"]
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将目标从es2015 更改es5没有成功,并且在 vendor.js 中给了我一个错误任何帮助将不胜感激。谢谢

Pat*_*sam 6

我通过改变目标固定问题tsconfig.json从文件ES2015ES5。d3 库目前与 es2015 不兼容。

由于使用了 UTF-8 符号(例如 ?),因此在 d3.js 中会引发错误。要解决此问题,您可以在 HTML 主机文档上指定 UTF-8 字符集。

<meta http-equiv="content-type" content="text/html; charset=UTF8">
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是问题所在。使用 Angular 7,可以针对 es2016/es2017,这显然可以与 d3 配合使用。现在升级到 Angular 8 后就不再起作用了。这要么意味着 Angular 7 没有在编译中包含 d3,但现在在 v8 中包含 d3,要么意味着 Angular 8 有问题。 (3认同)