- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用带有 ngrx 的 angular-cli 项目 (1.0.0-beta.25.5) 来管理状态。我关注了this article并设法让热模块更换正常工作,但是我还没有找到一种方法来在发生这种情况时保持状态。
我已经看到以下内容,但无法使任何工作正常进行或获得灵感:
https://github.com/AngularClass/angular2-hmr (认为您需要访问 webpack 配置以添加加载器)
Angular 2 : Thoughs about HMR and @ngrx/store (尝试了 get__HMR__state 但对我不起作用)
有没有人对如何处理这个问题有任何想法或建议?我希望继续使用 cli,因此需要找到一种与之集成的方法。
编辑:在这里也找到了同样问题的人https://github.com/ngrx/store/issues/311
最佳答案
我知道这是死灵法术;P 但对于某些人来说这仍然可能有用。
您从 Angular 类 HMR 中错过的很可能是用于设置完整状态的元缩减器。
下面是我如何通过示例链接实现 HMR,我从中得出了这个 https://github.com/gdi2290/angular-hmr
首先,您需要一个元 reducer 来处理整个状态的设置。
// make sure you export for AoT
export function stateSetter(reducer: ActionReducer<any>): ActionReducer<any> {
return function(state: any, action: any) {
if (action.type === 'SET_ROOT_STATE') {
return action.payload;
}
return reducer(state, action);
};
}
let _metaReducers: MetaReducer<fromRoot.State, any>[] = [];
if (environment.hmr) {
_metaReducers = [stateSetter];
}
export const metaReducers = _metaReducers;
当为 NgModule 注册 StoreModule.forRoot 时,记得注册那个 metareducer 数组。
StoreModule.forRoot(reducers, { metaReducers })
对于 AppModule,您需要定义 hmrOnInit 、 hmrOnDestroy 和 hmrAfterDestroy 方法。
export class AppModule {
constructor(
private appRef: ApplicationRef,
private store: Store<fromRoot.State>
) { }
public hmrOnInit(store) {
if (!store || !store.state) {
return;
}
// restore state
this.store.dispatch({ type: 'SET_ROOT_STATE', payload: store.state });
// restore input values
if ('restoreInputValues' in store) {
const restoreInputValues = store.restoreInputValues;
// this isn't clean but gets the job done in development
setTimeout(restoreInputValues);
}
this.appRef.tick();
Object.keys(store).forEach(prop => delete store[prop]);
}
public hmrOnDestroy(store) {
const cmpLocation = this.appRef.components.map(
cmp => cmp.location.nativeElement
);
let currentState: fromRoot.State;
this.store.take(1).subscribe(state => (currentState = state));
store.state = currentState;
// recreate elements
store.disposeOldHosts = createNewHosts(cmpLocation);
// save input values
store.restoreInputValues = createInputTransfer();
// remove styles
removeNgStyles();
}
public hmrAfterDestroy(store) {
// display new elements
store.disposeOldHosts();
delete store.disposeOldHosts;
}
}
有关更多具体信息,请参阅 https://github.com/gdi2290/angular-hmr
关于angular-cli hmr 和 ngrx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41679716/
HMR API 的 webpack 文档提到了以下方法: accept(dependencies: string[], callback: (updatedDependencies) => void)
这是我页面的初始加载: 在更改了一些文本后,HMR 被激活,但附加 DOM 而不是替换它: 有人知道是什么导致了这个问题吗?控制台上没有错误。 更新: 我在命令行中使用了 ASP.NET Core w
Minimalistic repository for problem testing 我现在有最简单的项目结构: root |-src --|index.pug --|-
我正在尝试运行一个简单的webpack-dev-server,如果相关源JavaScript文件已更改,它会在请求时编译.bundle.js文件。我目前不想启用热模块更换 (HMR)。 我的服务器正在
加载后一切正常,hmr 正在工作。然后就出现这个错误。 GET http://localhost:3000/__webpack_hmr net::ERR_INCOMPLETE_CHUNKED_ENCO
我环顾四周,但无法获得我在 stackoverflow 上看到的任何答案。 我无法使用 webpack 或 webpack dev-server 的命令行;我只能使用 Node API。 下面是我是如
我有一个与 webpack 捆绑在一起的 Express 服务器应用程序。客户端也与 webpack 捆绑在一起,并由服务器在开发模式下使用 webpack-dev-middleware 和 webp
我有使用 Typescript、ReactJS 和 Webpack 构建的前端应用程序。 我正在尝试启用 HMR。 这些是启动脚本 "build": "NODE_ENV=production $(np
有什么方法可以忽略 HMR 上的日志吗?进行多次更改后,这非常烦人,因为控制台变得巨大,而且也很难跟踪自定义日志。 这是执行日志记录的 HMR 模块的 log-apply-result.js 中的代码
我一直在玩弄 Webpack 的不同功能,并且正在慢慢理解。 典型的控制台输出: [WDS] App updated. Recompiling... [WDS] App hot update... [
我已成功设置 HMR,一切正常,包括代理后端站点。剩下的唯一问题是,除非我完全重新加载,否则我无法在浏览器中看到实际的原始代码 (ES2015)。 我是不是漏掉了什么或者这是不可能的?我使用 'che
我想在我的 React 应用程序中使用 Webpack HMR。我的 webpack 配置如下所示: var path = require('path'); var ExtractTextPlugin
我正在使用 webpack-dev-server 进行热模块替换。它工作得很好,但是这个错误每隔几秒就会出现在控制台中:GET http://mysite:8080/__webpack_hmr 404
有人知道当 Webpack 在热模式下运行时如何从 HTML Webpack 插件保存 HTML 页面吗?它在内存中保存文件,我想将它们保存到文件系统中。谢谢。 最佳答案 我用过 html-webpa
一个简单的 webpack 配置但不起作用: var path = require("path"); var HtmlWebpackPlugin = require('html-webpack-plu
我目前正在使用带有 ngrx 的 angular-cli 项目 (1.0.0-beta.25.5) 来管理状态。我关注了this article并设法让热模块更换正常工作,但是我还没有找到一种方法来在
我从 Webpack 收到以下错误: 无效的 HMR 消息后跟一串非常详细的 JSON。 我真的找不到任何资源来更好地调试它。有什么建议吗? 如果有人能告诉我为什么在整个应用程序中使用 require
我正在尝试新的 bun平台 (v0.1.6) 与 Hono . 我遵循的步骤: bun create hono test-api cd test-api bun dev 然后服务器显示这条信息: $
我正在尝试设置 webpack 的开发服务器和 HMR 以与 Shopify 主题开发一起使用。运行服务器并打开本地 IP 时,我从 Shopify 的 DNS 提供商 CloudFlare 收到此错
我试图让 HMR 与 webpack v5 一起运行,但它不起作用。当我修改并保存文件时,webpack 会正确重新编译项目,但前端没有更新。 我阅读了这篇文章并按照说明操作:https://webp
我是一名优秀的程序员,十分优秀!