Angular 7 / 1.x混合应用程序可以支持HMR吗?

时间:2019-05-30 20:27:03

标签: javascript angularjs angular webpack-hmr

我正在尝试使用downgradeModule策略在混合角度应用程序上实现HMR,但失败了。我来自另一个问题Can an Angular 5/1.x hybrid app support HMR?,因为我认为没有可接受的答案,并且@scipper答案无法正常工作(在下面的说明中)。
我使用HMR(添加了new webpack.HotModuleReplacementPlugin(),添加了devServer.hot:true和其他内容)设置了webpack配置(不是ng-cli,自定义配置),我可以看到它正在工作,我的输入文件正在重新加载而没有整页重新加载新资源和webpack应用的热更新效果很好,但是angular和angularjs应用程序无法正常工作(使用旧的缓存代码)。
我的计划是:
1)将模块hot accept添加到条目文件。
2)销毁angular.js应用程序(如果存在)(使用$ rootScope destroy?)。
3)销毁根angular.js应用节点(如果存在)。
4)用

这样的代码构建angular模块
// bootstrap you new Angular 7 main module
const bootstrapFn = (extraProviders) => {
  const platformRef = platformBrowserDynamic(extraProviders);
  return platformRef.bootstrapModule(MyAngularSevenModule);
};
const downgradedModule = downgradeModule(bootstrapFn);

5)调用或重新调用angularjs模块和依赖项以及我的angular模块-这是我认为的主要问题。
6)引导angularjs应用程序(或$ compile + $ digest)。

已尝试:
-https://github.com/PatrickJS/angular-hmr-由于downgradeModule策略(根节点为ajs)而无法使用。
-https://github.com/vitaliy-bobrov/angular-hot-loader-由于未实现提供者和其他拦截器而导致的许多错误。
-https://github.com/noppa/ng-hot-reload

我希望引导程序将更新缓存的角度实体,但是在hmr重载后,角度使用旧的控制器/组件/指令(在“源代码”选项卡中带有新代码)。
有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我在入口文件中设置错误,@ scipper是正确的,正在运行。但是通过这种策略,我们正在重新加载整个应用程序(并且丢失任何状态),我想找到仅重新启动更改的部分的解决方案。