Webpack 热重载(webpack-hot-middleware)非常适合客户端;每当文件更改时,它都会在客户端上重建和更新资产。但是对于通用/同构服务器,服务器需要预先呈现 HTML 响应,这是非常困难的。
天真的解决方案是在文件更改时重新启动(例如使用 nodemon)服务器,但这会关闭所有客户端连接,并且对于大型服务器来说,这非常慢。
更好的解决方案是手动查看资产(例如使用 chokidar),并在文件更改后再次清除缓存/要求。但是当还需要监视依赖项时,这需要额外的复杂性;必须解析文件以确定它们需要什么。
此外,如果代码库是用 compile-to-js 语言编写的,最好运行一个已编译的服务器用于生产(不再需要 babel-node)。对于已编译的服务器,不再可能使用上述机制,因为:
- webpack 对动态需求的支持很差:
require(variable)
与require('./file.js')
- 节点本身不能要求代码
在我的例子中,我将 require 函数抽象为一个使用babel-register
ed require 的包(之前我使用了 babel API,但它依赖于很多未记录的节点源)。
这是我目前在https://github.com/edge/cyc中使用的解决方案,它有点工作,但它是随意的并且有很多警告。一般来说,与 webpack 并行编写的自定义代码越多,就越偏离预期的行为。
有没有更容易复制 webpack 行为的可靠方法?