详解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 相关文章推荐
javascript的函数
Jan 31 Javascript
JS跨域总结
Aug 30 Javascript
jQuery选择器全面总结
Jan 06 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 Javascript
jQuery表单域选择器用法分析
Feb 10 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
Javascript中arguments用法实例分析
Jun 13 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
vue中使用localstorage来存储页面信息
Nov 04 Javascript
深入理解Vue 的钩子函数
Sep 05 Javascript
vue+element_ui上传文件,并传递额外参数操作
Dec 05 Vue.js
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
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 项目的方法
2007/01/02 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
运动会开幕式解说词
2014/02/05 职场文书
大学生暑期实践感言
2014/02/26 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
MySQL中varchar和char类型的区别
2021/11/17 MySQL