Javascript 加载+;运行时覆盖函数

Javascript 加载+;运行时覆盖函数,javascript,node.js,Javascript,Node.js,我试图创建一个用Javascript+NodeJS编写的IRC机器人。这个机器人应该能够在运行时加载插件,并且应该能够在更改后重新加载相同的插件 什么有效? 在运行时加载文件+执行其代码 怎么了? 在再次加载相同的插件后,if仍然执行我的代码,但现在它发生了两次或第n次加载插件 当前代码: bot.match(/\.load/i, function(msg) { require('./plugins/plug.js')(this); }); module.exports = func

我试图创建一个用Javascript+NodeJS编写的IRC机器人。这个机器人应该能够在运行时加载插件,并且应该能够在更改后重新加载相同的插件

什么有效?

在运行时加载文件+执行其代码

怎么了?

在再次加载相同的插件后,if仍然执行我的代码,但现在它发生了两次或第n次加载插件

当前代码:

bot.match(/\.load/i, function(msg) {
    require('./plugins/plug.js')(this);
});

module.exports  = function(bot) {
    bot.match(/\.ping/i, function(msg) {
    msg.reply('pong');
});
那么,有没有办法解决我的问题,让这一切顺利进行

顺便说一句,我用它作为这个机器人的基地

已更新,已修复:

甚至对该文件的更改也会被忽略,因此它必须类似于 缓存


清除
require已修复。缓存
require
不会重新加载文件。一旦它被加载一次,它就在内存中,不会再次重新加载。听起来您想让bot保持开启状态,并随时更改它所需的脚本内容。您可以通过删除
require.cache
来实现这一点。查看并回答我自己的问题。在加载插件时,我将每个对象添加到一个全局数组中。这可以很容易地访问和删除后

function clearplugins() {
    require("fs").readdirSync("./plugins/active").forEach(function(file) {
        delete require.cache[require.resolve("./plugins/active/" + file)];
    });

    plugins.forEach(function(obj) {
        obj();
    });
}

function loadplugins() {
    require("fs").readdirSync("./plugins/active").forEach(function(file) {

        if(file.slice(-2) == 'js') {
            plugins.push(require("./plugins/active/" + file)(bot));
            console.log(file+' loaded');
        }
    });
}

好的,谢谢你的回答!我已经找到了,但是我错过了从
require.cache
:完整路径中删除条目的内容。如示例
require.resolve
中所示,在本例中提供了帮助。但是仍然有一个问题:我的函数的输出仍然出现第n次,这意味着该函数仍然在内存中。有什么想法吗?