如何动态加载脚本(节点js)

时间:2013-02-16 15:04:36

标签: javascript node.js

所以,在我的nodeJS服务器部分,我需要使用js文件中的函数。这个文件经常更新,所以每当客户端加载页面时我都需要动态加载这个文件。我怎么能这样做?谢谢!

3 个答案:

答案 0 :(得分:2)

使用require从其他文件加载代码。但是,一旦你require'一个文件,再次要求它不会再次从磁盘加载文件,而是从Node维护的内存缓存加载。要再次重新加载文件,您需要先删除文件的缓存条目,然后再次调用require

假设您的文件名为/some/path/file.js

// Delete cache entry to make sure the file is re-read from disk.
delete require.cache['/some/path/file.js'];
// Load function from file.
var func = require('/some/path/file.js').func;

包含该函数的文件看起来像这样:

module.exports = {
  func : function() { /* this is your function */ }
};

答案 1 :(得分:2)

除了@robertklep答案之外,这里还提供任何路径的解决方案:

const path = require('path');

var lib_path = './test' // <-- relative or absolute path                                                                  
var file = require(lib_path);

const reset_cache = (file_path) => {
    var p = path.resolve(file_path);
    const EXTENTION = '.js';
    delete require.cache[p.endsWith(EXTENTION) ? p : p + EXTENTION];
}

// ... lib changed                                                                                                             

reset_cache(lib_path);
file = require(lib_path); // file changed

不幸的是,重新加载文件的所有依赖项也没有重新加载。

此外,您可以使用clear-require模块:

const clear_require = require('clear-require');

require('./foo');
// ... modify
clear_require('./foo');
require('./foo');

它可以清除所有模块并处理正则表达式。

答案 2 :(得分:0)

这个非常简单的脚本让我开心:) github.com/isaacs/node-supervisor

第一

npm install supervisor -g

第二

supervisor myapp.js

我有一些错误,但它确实有效。