Angular7 熱更新

說明

1、HMR的好處是:開發(fā)的時候不需要每次都整體刷新瀏覽器,只替換被修改過的模塊
2、不要把HMR在生產(chǎn)環(huán)境里面,因為你不能每次改了代碼都去刷所有客戶的瀏覽器

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文件

這樣基本的配置就都好了,這個時候啟動項目你會發(fā)現(xiàn)類似如下的錯誤:

這個時候需要在 src/tsconfig.app.json 文件中加上

"types": ["node"]

6、啟動應(yīng)用

最新的angular版本已經(jīng)內(nèi)置了HMR 支持,所以命令只需要加上 --hmr即可,無需像以前版本中配置configurations之類的

ng serve --hmr

好了,項目已經(jīng)成功啟動,這時候你會看到如下警告,他只是一個提示,不要慌



我們只需要在項目根目錄的中的server.options下添加

"hmrWarning": false
angular.json

最后我們再來重新啟動項目,大功告成?。?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容