详解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 相关文章推荐
document 和 document.all 分别什么时候用
Jun 22 Javascript
Prototype 工具函数 学习
Jul 23 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
Sep 04 Javascript
jquery的live使用注意事项
Feb 18 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
jQuery的animate函数学习记录
Aug 08 Javascript
基于Vue.js实现数字拼图游戏
Aug 02 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
vue axios登录请求拦截器
Apr 02 Javascript
浅谈React Native 传参的几种方式(小结)
May 21 Javascript
如何利用js在两个html窗口间通信
Apr 27 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连接Oracle for NT 远程数据库
2006/10/09 PHP
mysql中存储过程、函数的一些问题
2007/02/14 PHP
php xml文件操作代码(一)
2009/03/20 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
axios学习教程全攻略
2017/03/26 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python机器学习之神经网络实现
2018/10/13 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
Python偏函数实现原理及应用
2020/11/20 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
大队委竞选演讲稿
2014/04/28 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
CSS的calc函数用法小结
2022/06/25 HTML / CSS