详解Angular6 热加载配置方案


Posted in Javascript onAugust 18, 2018

Angular6 热加载配置方案,分享给大家,具体如下:

示例 ng 版本如下 :

$ ng --version

   _           _         ____ _   ___
  / \  _ __  __ _ _  _| | __ _ _ __   / ___| |  |_ _|
  / △ \ | '_ \ / _` | | | | |/ _` | '__|  | |  | |  | |
 / ___ \| | | | (_| | |_| | | (_| | |   | |___| |___ | |
 /_/  \_\_| |_|\__, |\__,_|_|\__,_|_|    \____|_____|___|
        |___/


Angular CLI: 6.0.8
Node: 8.11.1
OS: win32 x64
Angular: 6.1.3
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package              Version
-----------------------------------------------------------
@angular-devkit/architect     0.6.8
@angular-devkit/build-angular   0.6.8
@angular-devkit/build-optimizer  0.6.8
@angular-devkit/core       0.6.8
@angular-devkit/schematics    0.6.8
@angular/cli           6.0.8
@ngtools/webpack         6.0.8
@schematics/angular        0.6.8
@schematics/update        0.6.8
rxjs               6.2.2
typescript            2.7.2
webpack              4.8.3

安装 hmr 依赖包

npm install --save-dev @angularclass/hmr --registry https://registry.npm.taobao.org

配置 hmr 文件

在 src/environments 目录下添加 environment.hmr.ts 配置文件

文件内容如下 :

export const environment = {
 production: false,
 hmr: true
};

然后分别在 environment.prod.ts 和 environment.ts 添加 hmr:false 配置项

配置 src/tsconfig.app.json 文件

"compilerOptions": {
 ...
 "types": ["node"]
}

如果不配置上面的 "types":["node"], 则会报错

ERROR in src/main.ts(16,7): error TS2304: Cannot find name 'module'.
src/main.ts(17,18): error TS2304: Cannot find name 'module'.

配置 src/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();
 });
};

更新 src/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 = () => 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));
}

配置 angular.json 文件

...
"build": {
 "builder": "@angular-devkit/build-angular:browser",
 "options": {
  "outputPath": "dist/ng6",
  "index": "src/index.html",
  "main": "src/main.ts",
  "polyfills": "src/polyfills.ts",
  "tsConfig": "src/tsconfig.app.json",
  "assets": ["src/favicon.ico", "src/assets"],
  "styles": ["src/styles.css"],
  "scripts": []
 },
 "configurations": {
  "hmr": {
   "fileReplacements": [
    {
     "replace": "src/environments/environment.ts",
     "with": "src/environments/environment.hmr.ts"
    }
   ]
  },
  "production": {
   "fileReplacements": [
    {
     "replace": "src/environments/environment.ts",
     "with": "src/environments/environment.prod.ts"
    }
   ],
   "optimization": true,
   "outputHashing": "all",
   "sourceMap": false,
   "extractCss": true,
   "namedChunks": false,
   "aot": true,
   "extractLicenses": true,
   "vendorChunk": false,
   "buildOptimizer": true
  }
 }
},
...
"serve": {
 "builder": "@angular-devkit/build-angular:dev-server",
 "options": {
  "browserTarget": "ng6:build"
 },
 "configurations": {
  "production": {
   "browserTarget": "ng6:build:production"
  },
  "hmr": {
   "browserTarget": "ng6:build:hmr",
   "hmr": true
  }
 }
},

启动应用

  • 方式一:ng serve --configuration hmr
  • 方式二:ng run ng6:serve:hmr

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 使用form表单select类实现级联菜单效果
Dec 19 Javascript
JQuery选择器、过滤器大整理
May 26 Javascript
学习JavaScript设计模式(代理模式)
Dec 03 Javascript
基于jQuery实现的无刷新表格分页实例
Feb 17 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
Jun 10 Javascript
让mocha支持ES6模块的方法实现
Jan 14 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 #Javascript
vue下history模式刷新后404错误解决方法
Aug 18 #Javascript
详解javascript appendChild()的完整功能
Aug 18 #Javascript
vue中的自定义分页插件组件的示例
Aug 18 #Javascript
vue 自定义提示框(Toast)组件的实现代码
Aug 17 #Javascript
微信小程序实现即时通信聊天功能的实例代码
Aug 17 #Javascript
在iFrame子页面里实现模态框的方法
Aug 17 #Javascript
You might like
PHP中ADODB类详解
2008/03/25 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
jqPlot Option配置对象详解
2009/07/25 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
python 字符串格式化的示例
2020/09/21 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
忠诚教育心得体会
2014/09/03 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
大学班长竞选稿
2015/11/20 职场文书
Java Redisson多策略注解限流
2022/09/23 Java/Android