我使用ASP.Net Core和Typescript / React / SpaServices / Webpack / HMR。 更改tsx文件时,HMR会替换浏览器中的代码。
我的问题是什么功能/程序正在观察文件的更改,然后触发重建? webpack是在后台使用节点运行的吗?如果是这样,我能看到该进程正在运行吗?日志等?
答案 0 :(得分:3)
webpack是否在后台使用节点运行?
是的,绝对的。这里有很多内容,但最终webpack
和webpack-dev-middleware
都在处理此问题。
首先是对UseWebpackDevMiddleware
的调用。 e.g:
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
正如我已经说过的,这里的幕后工作还有很多,所以我只是概述一下主要部分。这是来自UseWebpackDevMiddleware
(source)的重要代码:
nodeServices.InvokeExportAsync<WebpackDevServerInfo>(
nodeScript.FileName,
"createWebpackDevServer",
JsonConvert.SerializeObject(devServerOptions)).Result;
InvokeExortAsync
函数是ASP.NET Core和NodeJ之间进行通信的地方。 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);
}
有很多createWebpackDevServer
正在调用(source)的代码,所以我不会在这里包含它,但足够说它最终运行使用webpack-dev-middleware(source)的连接服务器(source)。
我希望能为你自己的探索提供足够的解释和起点。
答案 1 :(得分:0)