2016-12-25 73 views
4

我開始的WebPack開發服務器(V 1.16)這樣如何以編程方式重新啓動的WebPack開發服務器(是close方法剛剛打破?)

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

+0

您可以通過nodemon運行它來得到你想要的效果。 –

+0

有沒有可以鏈接到@JuhoVepsäläinen的例子?它似乎是爲了觀看文件更新而製作的。我試圖改變內存中的配置。如果這更容易,我也不需要運行監視器。我可以按需重啓服務器。我只是不知道有什麼方法來重新啓動它 – bdwain

+1

如果nodemon不會爲你工作(爲我工作),這裏是另一種選擇:https://gist.github.com/bebraw/a990a206d9b66b14b8e6。 –

回答

1

,因爲它是利用具有的無效方法webpack-dev-middleware

webpackServer.middleware.invalidate() 
+0

或者只是webpackServer.sockWrite(webpackServer.sockets,'content-changed') – ysle