首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HMR没有用角CLI更新视图。

HMR没有用角CLI更新视图。
EN

Stack Overflow用户
提问于 2018-06-12 05:56:47
回答 4查看 6.5K关注 0票数 4

我最近更新了我的角应用程序的最新版本。在做了一夜恶梦之后,除了HMR,我什么都能做。我被困得很厉害。以下是我的配置,根据HMR故事关于角CLI维基:

angular.json

代码语言:javascript
复制
      "build": {
              "configurations": {
                "hmr": {
                  "fileReplacements": [
                    {
                      "replace": "src/environments/environment.ts",
                      "with": "src/environments/environment.hmr.ts"
                    }
                  ]
                }
              }
            },
 "serve": {
          "configurations": {
            "hmr": {
              "hmr": true,
              "browserTarget": "appHit:build:hmr"
            },
          }
        },

hmr.js

代码语言: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();
  });
};

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().catch(err => console.log(err));
}

我尝试了以下命令:

ng serve --hmr

ng serve --hmr --configuration hmr

ng serve --configuration hmr

更改时会编译所有内容,甚至触发的事件也会在浏览器中缓存,但是在HMR记录了以下内容之后什么也不会发生:

代码语言:javascript
复制
[WDS] App updated. Recompiling...
[WDS] App hot update...

在这一点上我完全迷失了方向。任何形式的帮助都将是非常感谢的。谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-11 13:26:22

我觉得这可能对一些人有帮助。我通过更新到7并在main.ts中为HMR添加了下面一行来解决我的问题

代码语言:javascript
复制
module['hot'].accept();

详情如下:

代码语言:javascript
复制
if (environment.hmr) {
    if (module['hot']) {
        module['hot'].accept();
        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 {
    console.log('hot');
    bootstrap().catch(err => console.log(err));
}

到目前为止,HMR一直工作得很好。我没有时间对它进行进一步的调试,但是很可能是依赖不兼容导致了它在我的端。

票数 1
EN

Stack Overflow用户

发布于 2018-07-25 11:53:02

我们面临着同样的问题。通过删除Webpack相关的开发依赖项和执行新的npm安装,解决了这个问题。

rm -R package-lock.json node_modules npm cache clean --force npm i

希望能帮上忙。

票数 6
EN

Stack Overflow用户

发布于 2018-09-28 17:03:37

有点晚到this...what为我工作是在我的ClientApp文件夹,我有一个/dist文件夹与所有的js bits...HMR不工作,如果有一个dist文件夹。如果你做了一个构建,区域就会到达那里。删除dist文件夹,然后运行ng服务。在我的例子中,我有一个托管它的.net核心应用程序,所以我构建了它,并通过修改html来针对我的角度app...test启动,file...app应该在浏览器中重新加载新的内容。

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

https://stackoverflow.com/questions/50810102

复制
相关文章

相似问题

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