详解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 相关文章推荐
jQuery对象和DOM对象之间相互转换的方法介绍
Feb 28 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
Mar 05 Javascript
JQuery实现的图文自动轮播效果插件
Jun 19 Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 Javascript
AngularJS的ng Http Request与response格式转换方法
Nov 07 Javascript
JS多物体实现缓冲运动效果示例
Dec 20 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
javascript回调函数详解
Feb 06 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
通过实例了解JS 连续赋值
Sep 24 Javascript
js实现盒子滚动动画效果
Aug 09 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 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页面缓存ob系列函数介绍
2012/10/18 PHP
深入解析php之sphinx
2013/05/15 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php构造函数与析构函数
2016/04/23 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
js实现微信分享代码
2020/10/11 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JS面向对象编程详解
2016/03/06 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python交换两个变量的值方法
2019/01/12 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
python Tornado框架的使用示例
2020/10/19 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
锐步英国官网:Reebok英国
2019/11/29 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
学习保证书范文
2014/04/30 职场文书
公司人事任命通知
2015/04/20 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
鲁冰花观后感
2015/06/10 职场文书
2015元旦感言
2015/12/09 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
JVM钩子函数的使用场景详解
2021/08/23 Java/Android