我可以在不重新启动 nodejs 应用程序的情况下刷新 `node_modules` 吗?

dbr*_*rrt 1 updates node.js npm

是否可以在 node.js 应用程序运行时刷新某些依赖项?

例如,我正在使用 的特定版本lodash,发布了新版本,我可以直接从我的应用程序触发刷新,还是添加必要的内容以package.json手动编辑和重建应用程序?

jfr*_*d00 5

只是为了弄清楚一些事实:

  1. 一旦加载了模块,操作代码就会存在于 JS 解释器的内存中。更改磁盘上的文件根本没有影响。
  2. 一旦加载了一个模块并且其他模块引用了它,就没有系统的方法来用新的模块引用替换该模块引用。可以想象,您可以从模块缓存中删除先前的模块,加载一个新模块,获取新的模块句柄并手动告诉使用先前模块的每段代码他们应该切换到使用新的模块句柄,但这是一个许多自定义代码,并且在某些情况下可能需要注意使其正常工作。
  3. node.js 没有任何内置方法可以用新版本的代码替换代码。
  4. “升级”代码的常用方法是用更新后的代码替换代码,然后重新启动您的应用程序,以便它加载新版本的代码。

是否可以在 node.js 应用程序运行时刷新某些依赖项?

因此,从模块缓存中手动删除模块,然后手动加载模块的更新版本,然后手动告诉每个使用旧模块句柄的人他们应该切换到新模块句柄在技术上是可行的。但是,这一切都假设原始模块中没有需要保留的状态,并假设您有某种方式为模块的每个用户提供一个新的模块句柄。这是一个有很多限制的大型手工编码项目(例如,仅在非常有限的情况下有效)。

例如,我正在使用特定版本的 lodash,发布了新版本,我可以直接从我的应用程序触发刷新还是添加必要的内容来编辑 package.json 并手动重建应用程序?

用更新的代码替换代码,重新启动您的应用程序。这是通常的方式。