从动态外部文件运行Nodejs函数

时间:2017-07-27 14:32:04

标签: javascript node.js function npm

我想知道是否有办法从外部文件运行Node函数,该文件可能会发生变化。

Main.js

function read_external(){
    var external = require('./external.js');
    var result = external.result();
    console.log(result);
}

setInterval(function(){
    read_external();
},3000);

External.js(初始)

exports.result = function(){
    return "James"; // Case 1
}

我现在通过键入node main.js

来运行代码

代码开始运行后,我将External.js更改为

exports.result = function(){
    return "Jack"; // Case 2
}

然而,尽管有这种变化,它仍然印刷詹姆斯,而不是杰克。 有没有办法编写代码,以便在代码更改时执行新函数?

我需要这个,因为我正在构建一个服务,人们可以将自己的脚本作为JS文件提供,并在服务中调用某个函数时执行,具体取决于谁调用它。

2 个答案:

答案 0 :(得分:1)

Node.js将缓存对同一文件的调用,因此不必再次获取它。要将文件视为新文件,您需要清除require.cache中的缓存。该文件的密钥应该是已解析的名称,您可以使用require.resolve()

查找该名称

答案 1 :(得分:1)

您可以在每次通话前从缓存中删除该模块。

var module = require.resolve('./external.js');

function read_external(){
    var external = require(module);
    var result = external.result();
    console.log(result);
}

setInterval(function(){
    delete require.cache[module]; //clear cache
    read_external();
},3000);