我正在启动这样的 webpack 开发服务器(v 1.16)
let compiler = webpack(webpackConfig);
let webpackServer = new webpackDevServer(compiler);
webpackServer.listen(program.webpackPort);
我想对入口点进行更改,然后重新启动服务器。我见过 invalidate 方法,但我见过的唯一方法是调用 compiler.apply 然后调用 server.invalidate(),并且 compiler.apply 似乎需要一个插件。
我也看过 close 方法,但这似乎不起作用。如果我在没有入口点更改的情况下关闭它,它似乎会正确重新启动。但是一旦我添加了第一个, close 似乎不再有任何效果(也没有控制台输出)。下面是我如何使用 close 方法。
if(shouldRestart){
webpackConfig.entry = newEntry;
webpackServer.close(); //same reference to server as above
compiler = webpack(webpackConfig);
webpackServer = new webpackDevServer(compiler);
webpackServer.listen(program.webpackPort);
}
我更深入地研究了 close 方法,因为它似乎应该做我想要的。我在新版本中看到它需要回调,所以我尝试传递它。
Server.prototype.close = function(callback) {
this.sockets.forEach(function(sock) {
sock.close();
});
this.listeningApp.close(function() {
this.middleware.close(callback);
}.bind(this));
this.sockets = [];
回调仅在我第一次调用 close 时调用,因此行为是相同的。
我只要停止开发服务器并使用新的 webpackConfig 启动一个新服务器就可以了,但我没有看到这样做的选项(除非这是 close 应该做的)。
Here's a gist for more detail
最佳答案
因为它正在使用 webpack-dev-middleware其中有 invalidate 方法:
webpackServer.middleware.invalidate()
关于webpack - 如何以编程方式重新启动 webpack 开发服务器(关闭方法是否刚刚被破坏?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41324064/