我想知道如何在运行时重新加载Node.js模块 .
假设我有以下代码:
index.js
var myModule = require("./app.js");
app.js
var express = require("express");
express.listen(3000, function() {
console.log("app listening on port 3000");
});
我尝试了多种方法来重新加载index.js模块中所需的模块 . 但Express应用程序不会重新启动 .
我想保持index.js运行,因为它处理动态重新编译Babel模块 . 并且需要完全重新启动具有快速服务器的app.js模块 .
如果没有为app.js启动第二个进程,有没有办法做到这一点?
3 回答
require-uncached是一个npm模块,它将清除缓存并每次从源代码加载模块,这正是您根据 Headers 感兴趣的内容 . 要使用它,您只需使用以下代码:
在执行此操作之前,可能需要确保所有先前的
app.js
's code (including the Express server) is stopped so that they don' t冲突为同一端口 .此外,我建议考虑这种方法是否真的是最好的答案 - 我确信像pm2这样的库可以处理停止和重新启动Node实例而不会有不必要的数据挂起的风险,这可能会导致内存泄漏 .
如果您要做的只是重新启动服务器而不重新启动该过程,我建议使用http.Server.close方法 . 根据express docs,app.listen方法返回一个http.Server对象,因此重新加载看起来像这样:
app.js
index.js
我建议你在网页包中使用 lazyload ,我在这个link有自己的帖子 .
第一个应用
第二个应用
还活着Plunker