如何以编程方式重启webpack dev服务器(关闭方法刚刚破解?)

我正在启动这样的webpack dev服务器(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方法的方法.

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启动一个新服务器,但我没有看到这样做的选项(除非那是应该关闭的).

Here’s a gist for more detail

最佳答案 因为它使用的是具有invalidate方法的
webpack-dev-middleware

webpackServer.middleware.invalidate()
点赞