美文网首页
Angular7 热更新

Angular7 热更新

作者: 举杯丶独醉 | 来源:发表于2019-01-29 00:01 被阅读0次

说明

1、HMR的好处是:开发的时候不需要每次都整体刷新浏览器,只替换被修改过的模块
2、不要把HMR在生产环境里面,因为你不能每次改了代码都去刷所有客户的浏览器

1、安装依赖

npm install @angularclass/hmr --save-dev

2、修改配置文件

// 修改src/environments/environment.ts
export const environment = {
  production: false,
  hmr: true
};
// 修改src/environments/environment.prod.ts
export const environment = {
  production: true,
  hmr: false
};

3、添加hmr.ts文件

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();
  });
};

4、修改main.ts文件

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 = () => {
  return platformBrowserDynamic().bootstrapModule(AppModule);
};

if (environment.hmr) {
  if (module['hot']) {
    hmrBootstrap(module, bootstrap);
  } else {
    // 未加上 --hmr 时,控制台会有错误提醒
    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.error(err));
}

5、配置tsconfig.app.json文件

这样基本的配置就都好了,这个时候启动项目你会发现类似如下的错误:

这个时候需要在 src/tsconfig.app.json 文件中加上

"types": ["node"]

6、启动应用

最新的angular版本已经内置了HMR 支持,所以命令只需要加上 --hmr即可,无需像以前版本中配置configurations之类的

ng serve --hmr

好了,项目已经成功启动,这时候你会看到如下警告,他只是一个提示,不要慌



我们只需要在项目根目录的中的server.options下添加

"hmrWarning": false
angular.json

最后我们再来重新启动项目,大功告成!!

相关文章

  • Angular7 热更新

    说明 1、HMR的好处是:开发的时候不需要每次都整体刷新浏览器,只替换被修改过的模块2、不要把HMR在生产环境里面...

  • 热更新

    参考文章 https://www.jianshu.com/p/2f356e3276b8

  • 热更新

    热更新技术背景 1.热更新定义,APP热更新,就是指软件不通过苹果APP Store的版本更新审核,直接可以自行更...

  • 热更新

    mono热更新 更新过程中强退导致dll损坏 问题的产生是这样的:我们的代码文件随着开发会越来越打,当更新一个 d...

  • 热更新

    需要前端把更新后的代码生成chcp.manifest 第一部: npm i -g cordova-hot-...

  • 热更新

    腾讯热更新 https://gold.xitu.io/post/584a70feac502e00691c4a07 ...

  • 热更新

    一、安装CodePush CLI 在项目根目录下,安装命令: yarn add code-push-cli 安...

  • 热更新

    游戏更新分为两种,一种是游戏内热更,这个不分渠道,所有的游戏包都去游戏的热更服务器去加载资源(一般是资源文件和非底...

  • 热更新

    一.QQ空间超级补丁技术 二.阿里百川HotFix 三.美团Robust 四.微信Tinker 五.QFix

  • 热更新

    腾讯: http://fanhang.me/ios/iosre-geng-xin-ji-chu-ji-yu-bug...

网友评论

      本文标题:Angular7 热更新

      本文链接:https://www.haomeiwen.com/subject/lgkojqtx.html