目标只有一个:
在不影响用户使用的情况下完成代码升级。
早期很多人理解成:
在同一个进程里替换代码
但现代工程认为:
这是危险且不必要的
因为在 Node.js 中做热更新代码, 牵扯到的点可能主要是 require 会有一个 cache, 有这个 cache 在, 即使你更新了 .js 文件, 在代码中再次 require 还是会拿到之前的编译好缓存在 v8 内存 (code space) 中的的旧代码. 但是如果只是单纯的清除掉 require 中的 cache, 再次 require 确实能拿到新的代码, 但是这时候很容易碰到各地维持旧的引用依旧跑的旧的代码的问题. 如果还要继续推行这种热更新代码的话, 可能要推翻当前的架构, 从头开始从新设计一下目前的框架.
因为系统运行时存在大量状态:
你无法知道:
谁还在使用旧代码