我将 ASP.Net Core 与 Typescript/React/SpaServices/Webpack/HMR 结合使用。 更改 tsx 文件时,HMR 会替换浏览器中的代码。
我的问题是什么功能/程序正在监视文件的更改然后触发重建? webpack 是否使用 node 在后台运行?如果是这样,我可以看到该进程正在运行吗?日志等?
请您参考如下方法:
Is webpack running in the background using node?
是的,绝对是。这里发生了很多事情,但最终 webpack 和 webpack-dev-middleware 都在处理这个问题。
它从调用 UseWebpackDevMiddleware 开始。例如:
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
正如我已经说过的,这里的幕后发生了很多事情,所以我将只概述其中的主要部分。以下是 UseWebpackDevMiddleware ( source ) 中的一行重要代码:
nodeServices.InvokeExportAsync<WebpackDevServerInfo>(
nodeScript.FileName,
"createWebpackDevServer",
JsonConvert.SerializeObject(devServerOptions)).Result;
InvokeExortAsync 函数是 ASP.NET Core 和 NodeJs 之间进行通信的地方。 nodeServices 变量是 HttpNodeInstance 的实例,它是 OutOfProcessNodeInstance 的子项。 OutOfProcessNodeInstance 类在构造时生成一个 NodeJs 服务器,如下所示 ( source ):
_nodeProcess = LaunchNodeProcess(startInfo);
这最终会使用 entrypoint-http.js 脚本文件 ( source ) 运行 NodeJs 服务器。这有很多代码,但它最终创建了一个 HTTP 服务器,用于监听来自对 InvokeExportAsync 的调用的请求。
此处调用的 JavaScript 函数 createWebpackDevServer ( source ) 看起来像这样,为简洁起见删除了异常处理:
export function createWebpackDevServer(callback) {
let aspNetWebpack = require('aspnet-webpack');
return aspNetWebpack.createWebpackDevServer.apply(this, arguments);
}
调用 ( source ) 的 createWebpackDevServer 有很多代码,所以我不会在这里包含它,但足以说明它结束了运行使用 webpack-dev-middleware ( source ) 的连接服务器 ( source )。
我希望这能为您自己的探索提供足够的解释和起点。
