首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新角后的Hmr问题

更新角后的Hmr问题
EN

Stack Overflow用户
提问于 2020-02-24 21:05:05
回答 2查看 1.8K关注 0票数 1

我正在处理一些遗留代码,我决定将其更新为角9。我已经解决了大多数其他问题,但我仍然被一些HMR代码抛出的错误所困扰。

代码语言:javascript
复制
 src/main.ts:16:7 - error TS2591: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.

16   if (module['hot']) {
         ~~~~~~
src/main.ts:17:18 - error TS2591: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.

17     hmrBootstrap(module, bootstrap);

它说找不到模块类型。我找到的其他答案是:删除所有的nodule_modules并重新安装,将节点添加到类型中,或者更改tsconfig中{ environments }的导入,但所有这些似乎都是正确的,因此我不完全确定为什么它找不到模块。这段代码的角度是5.2,一定是一路上搞砸了。

我已经扫描了一些文件,这就是我发现的

  • main.ts

代码语言:javascript
复制
import { enableProdMode } from "@angular/core";
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";

import { AppModule } from "./app/app.module";
import { environment } from "./environments/environment";

import { hmrBootstrap } from "./hmr";

if (environment.production) {
  enableProdMode();
}

const bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);

if (environment.hmr) {
  if (module['hot']) {
    hmrBootstrap(module, bootstrap);
  } else {
    console.error("HMR is not enabled for webpack-dev-server!");
    console.log("Are you using the --hmr flag for ng serve?");
  }
} else {
  bootstrap();
}

  • hmr.ts

代码语言:javascript
复制
import { NgModuleRef, ApplicationRef } from "@angular/core";
import { createNewHosts } from "@angularclass/hmr";

export const hmrBootstrap = (
  module: any,
  bootstrap: () => Promise<NgModuleRef<any>>
) => {
  let ngModule: NgModuleRef<any>;
  module.hot.accept();
  bootstrap().then(mod => (ngModule = mod));
  module.hot.dispose(() => {
    const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);
    const elements = appRef.components.map(c => c.location.nativeElement);
    const makeVisible = createNewHosts(elements);
    ngModule.destroy();
    makeVisible();
  });
};

  • tsconfig.app.json

代码语言:javascript
复制
{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": [
      "nodes"
    ]
  },
  "files": [
    "main.ts",
    "polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

我在这个问题上已经有一段时间了,所以如果能提供任何帮助,我们将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-16 22:33:22

您的tsconfig.app.json文件中有一个错误。要添加的正确类型是node而不是nodes

代码语言:javascript
复制
{
  ...
  "types": [
    "node"
  ]
  ...
票数 2
EN

Stack Overflow用户

发布于 2020-03-09 16:15:28

认为这将通过在tsconfig.app.json文件部分中添加对您的文件的引用来解决。指向您的typings.d.ts文件。

E.g

代码语言:javascript
复制
"files": [
    "typings.d.ts",

这是因为在角9更新中

...updated tsconfig.app.json来限制编译的文件。如果您依赖于编译中包含的其他文件,如typings.d.ts文件,则需要手动将其添加到编译.

中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60383897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档