2

Webpack热重载(webpack-hot-middleware)为客户提供了极大的帮助;它会在文件发生更改时重建和更新客户端上的资产。但对于服务器需要预渲染HTML响应的通用/同构服务器来说,这非常困难。webpack - 在服务器上重新加载热模块

天真的解决方案是重新启动(例如,用nodemon)每当一个文件被改变的服务器,但是这将关闭所有的客户端连接,并且对于大的服务器,这是非常慢的。

一个稍微好一点的解决方案是手动观看资产(例如用chokidar),并且一旦文件被更改清除缓存/再次需要。但是当需要监视依赖性时,这需要额外的复杂性;文件必须被解析以确定他们需要什么。

此外,如果代码库是用编译到JS语言,最好是运行生产编译服务器中(没有更多的巴贝尔节点)。与编译服务器,它不再能够使用上述机制,这是因为:

  • 的WebPack具有用于动态差支持需要:require(variable)而非require('./file.js')
  • 节点本身不能要求代码

就我而言,我已经中提取出需要的功能放入使用babel-register版需要一个包(我以前使用的通天API,但它依赖于大量的无证节点源)。

这是我目前在https://github.com/edge/cyc,其中有些作品使用该解决方案,但它是杂乱无章,有很多需要注意的地方。一般来说,与webpack并行写入的定制代码越多,越偏离期望的行为。

有没有一个更强大的方法来更容易地复制webpack的行为?

回答

1

我写了一个package这可能会有所帮助。您可以在您的服务器代码中使用if (module.hot) {...}

简而言之,在一个webpack配置中,这个function创建一个服务器作为分叉进程。如果源文件发生变化,webpack会重新编译并向子进程发送一个信号。在您的服务器代码中,您可以包含if (module.hot) {... module.hot.accept(...) ...}以接受或拒绝更新。

但是,如果您接受更新,请记住删除所有可能的副作用。如果拒绝,服务器将重新启动。

我仍然在学习......希望这有助于

相关问题