Angular的HMR功能怎么实现

这次给大家带来Angular的HMR功能怎么实现,Angular的HMR功能实现注意事项有哪些,下面就是实战案例,一起来看一下。

最近一个同事在使用Angular的时候,希望能像VUE那样,修改代码后浏览器不刷新,页面对应修改的组件自动更新的功能。这个功能的名字时HMR (hot module replace)。

稍微研究了一下,发现在angular/cli创建的项目中,实现这个不算太难,步骤如下:

1、首先创建一个src/environments/environment.hmr.ts文件,内容如下

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

登录后复制

当然,对应的environment.prod.ts和environment.ts需要增加一个hmr:false.

如果environment.ts里面的hmr设置为ture,那么ng serve –hmr也有同样效果。不过我对热替换功能还不是那么相信,重新刷新浏览器能保证状态更加干净一些,所以让environment.ts中的hmr为false.

2、在.angular-cli.json文件的环境中增加hmr的环境,大致如下:

"environments": { ... "hmr": "environments/environment.hmr.ts",}

登录后复制

3、在package.json的scripts中增加一个新的命令。(当然也可以不增加,直接运行ng serve –hmr -e=hmr和运行npm run hmr效果一样)

"scripts": { ... "hmr": "ng serve --hmr -e=hmr"}

登录后复制

4、安装hmr模块,命令如下:

npm install --save-dev @angularclass/hmr

登录后复制

5、创建srchmr.ts文件,内容如下:

import { NgModuleRef, ApplicationRef } from '@angular/core';import { createNewHosts } from '@angularclass/hmr';export const hmrBootstrap = (module: any, bootstrap: () => Promise<NgModuleRef>) => { let ngModule: NgModuleRef; module.hot.accept(); bootstrap().then(currentModule => ngModule = currentModule); module.hot.dispose(() => {  const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);  const elements = appRef.components.map(c => c.location.nativeElement);  const removeOldHosts = createNewHosts(elements);  ngModule.destroy();  removeOldHosts(); });};

登录后复制

这事热替换的关键,hmrBootstrap会替换原始的bootstrap(下面会看到), 替换后,当有新的模块更新时,hmr会首先移除掉旧有的模块,然后接收新的模块。这些都是发生在浏览器里面。所以页面不会刷新。

6、更新srcmain.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('Ammm.. HMR is not enabled for webpack'); }} else { bootstrap();}

登录后复制

这里替换就得启动文件,如果设置为hmr,那么调用hmrBootStrap来启动网页,否则就用过去的

7、现在运行npm run hmr或者ng serve –hmr -e=hmr,就实现了热替换功能。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

express默认日志组件morgan的详细介绍

webpack的热模块替换HMR/热更新的具体步奏

以上就是Angular的HMR功能怎么实现的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2774824.html

(0)
上一篇 2025年3月8日 14:13:22
下一篇 2025年3月8日 14:13:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS实现定时器+提示框

    这次给大家带来JS实现定时器+提示框,JS实现定时器+提示框的注意事项有哪些,下面就是实战案例,一起来看一下。 业务场景:当鼠标移入某元素时,显示提示框进行介绍。当鼠标移除时,会自动消失。引入ToolTip.js和ToolTip.css 主…

    2025年3月8日 编程技术
    200
  • Angular怎样避免使用Dom的误区

    这次给大家带来Angular怎样避免使用Dom的误区,Angular使用Dom的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 Angular2的设计目标本来就是要让浏览器和DOM独立。DOM是复杂的,因此使组件与它分离,会让我们的…

    编程技术 2025年3月8日
    200
  • Angular父组件怎么调用子组件

    这次给大家带来Angular父组件怎么调用子组件,Angular父组件调用子组件的注意事项有哪些,下面就是实战案例,一起来看一下。 理解组件 组件是一种特殊的指令,使用更简单的配置项来构建基于组件的应用程序架构 这样他能简单地写app,通过…

    2025年3月8日
    200
  • Angular的单向数据流使用详解

    这次给大家带来Angular的单向数据流使用详解,使用Angular单向数据流的注意事项有哪些,下面就是实战案例,一起来看一下。 变更检测 Angular 中,数据是由顶部根节点流向最后的叶子节点,整个数据流是单向,构成一颗单向树。 Ang…

    2025年3月8日
    200
  • angular怎么实现共享服务在多个组件中数据通信

    这次给大家带来angular怎么实现共享服务在多个组件中数据通信,angular实现共享服务在多个组件中数据通信的注意事项有哪些,下面就是实战案例,一起来看一下。 应用场景,不同组件中操作统一组数据,不论哪个组件对数据进行了操作,其他组件中…

    2025年3月8日
    200
  • 如何实现AJAX 的异步功能

    本文给大家分享的是如何实现ajax的异步功能,非常的详细,也很实用,适合javascript的初学者,有需要的小伙伴参考下。 关于AJAX异步功能的小实验 为了实验ajax的异步 性,先建一个Web项目,结构大概是这个样子 TestServ…

    2025年3月8日
    200
  • webpack的4.0打包优化如何实现

    这次给大家带来webpack的4.0打包优化如何实现,实现webpack 4.0打包优化的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了webpack4.0打包优化策略整理小结,分享给大家,具体如下: webapck4 新特性…

    2025年3月8日 编程技术
    200
  • Angular JQuery生成简单快递管理界面的代码分享

    本篇文章给大家分享的内容是Angular JQuery生成简单快递管理界面的代码分享,有着一定的参考价值,有需要的朋友可以参考一下 话不多说,直接上代码: nbsp;html>–按状态查询–已发货未发货id  商品名用户名手机号价…

    编程技术 2025年3月8日
    200
  • 简单实现angularjs遮罩过渡加载

    这篇文章主要介绍了简单实现angularjs遮罩过渡加载,非常不错,具有参考借鉴价值,需要的朋友参考下吧 前言:  很多情况下angularjs 加载页面时,会显示‘{{}}’ 等,带来页面美观性的问题。所以这个时候我们要用到遮罩,也就是页…

    2025年3月8日
    200
  • vue单个组件实现无限层级多选菜单功能

    这篇文章主要介绍了vue单个组件实现无限层级多选菜单的相关资料,现在分享给大家,需要的朋友可以参考下 wTree.vue  原理:每一个多选框都是一个节点,每个节点就是一个wTree组件,有父级(顶级level为0),有子级(底层list[…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论