最近一个同事在使用Angular的时候,希望能像VUE那样,修改代码后浏览器不刷新,页面对应修改的html" target="_blank">组件自动更新的功能。这个功能的名字时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、创建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(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、更新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('Ammm.. HMR is not enabled for webpack'); } } else { bootstrap(); }
这里替换就得启动文件,如果设置为hmr,那么调用hmrBootStrap来启动网页,否则就用过去的
7、现在运行npm run hmr或者ng serve --hmr -e=hmr,就实现了热替换功能。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍java实现查找替换功能,包括了java实现查找替换功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现查找替换功能的具体代码,供大家参考,具体内容如下 查找 查找下一处 替换 替换下一处 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
由于使用了容器模式来组织各模块的实例,意味着你可以比较容易的替换掉已经有的服务,以公众号服务为例: <...> $app = Factory::officialAccount($config); $app->rebind('request', new MyCustomRequest(...)); 这里的 request 为 SDK 内部服务名称。
热替换 在运行时替换代码, 主要是两类的: ClojureScript 编译工具自动替换代码 从 REPL 当中刷新代码重新引入命名空间 shadow-cljs 在 shadow-cljs.edn 当中配置了 :devtools 就会自动激活热替换. REPL 跟 Clojure REPL 类似, ClojureScript 有命令行工具可以替换命名空间, 主要是 Planck 和 Lumo, 比
问题内容: 我在暑期研究中从事内核工作。我们希望在特定的RTT计算中对TCP进行修改。我想做的是将tcp_input.c中的功能之一的分辨率替换为由动态加载的内核模块提供的功能。我认为这将改善我们开发和分发修改的速度。 我感兴趣的函数被声明为静态的,但是我用非静态函数重新编译了内核,并由EXPORT_SYMBOL导出。这意味着该功能现在可供内核的其他模块/部分访问。我已经通过“ cat / pro
本文向大家介绍Opencv实现抠图背景图替换功能,包括了Opencv实现抠图背景图替换功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Opencv实现抠图替换背景图的具体代码,供大家参考,具体内容如下 下面简单图片演示一下: 提取mask: ===> 替换背景: + = python的opencv代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐
本文向大家介绍Nginx stub_status 监控模块的功能实现,包括了Nginx stub_status 监控模块的功能实现的使用技巧和注意事项,需要的朋友参考一下 Nginx 的 stub_status 模块用于查看 Nginx 的基本状态信息。 模块实现的功能 通过这个模块,可以看到如下的 Nginx 状态信息: 其中: Active connections:活跃的连接数 accepts