javascript - 如何在运行时重新加载所需的模块?

标签 javascript node.js express babeljs

我想知道如何在运行时重新加载 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 模块。并且需要完全重启带有 express server 的 app.js 模块。

Is there any way to do this without starting a second process for the app.js?

最佳答案

require-uncached是一个 npm 模块,每次都会清除缓存并从源新鲜加载一个模块,根据您的标题,这正是您感兴趣的内容。要使用它,您只需使用以下代码:

const requireUncached = require('require-uncached');
requireUncached('./app.js');

在执行此操作之前,可能有必要确保所有以前的 app.js 代码(包括 Express 服务器)都已停止,这样它们就不会因同一个端口而发生冲突。

另外,我建议考虑一下这种方法是否真的是最好的答案 - 我确信像 pm2 这样的库可以处理停止和重新启动 Node 实例,而不会有不需要的数据卡在周围的风险,这可能会导致内存泄漏。

关于javascript - 如何在运行时重新加载所需的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946522/

相关文章:

javascript - Node.js 中非并行异步循环与同步循环是否存在性能差异?

node.js - Sequelize 创建关联的对象不起作用

sql - Sequelize 一对多关联错误

javascript - 单元测试 express.js 路由

javascript - 如何检查表单中是否至少选中了一个复选框?

javascript - 如何在Vuejs中隐藏复选框点击的内容?

javascript - if 11pm 调用函数更改表单输入值

javascript - href slider (类似于图像 slider ,但带有链接)

node.js - Nodemon 不听

javascript - 使用 EJS 将数据从 Node js 传递到 HTML