详解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 相关文章推荐
分页栏的web标准实现
Nov 01 Javascript
基于jquery的放大镜效果
May 30 Javascript
javascript动态加载实现方法一
Aug 22 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
Feb 05 Javascript
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
javascript删除一个html元素节点的方法
Dec 20 Javascript
简介JavaScript中fixed()方法的使用
Jun 08 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 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
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
python生成随机mac地址的方法
2015/03/16 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
python 调整图片亮度的示例
2020/12/03 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
学前教育专业毕业生自荐信
2013/10/03 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python