【发布时间】:2018-07-17 01:12:46
【问题描述】:
所以,在我的 nodeJS 服务器部分,我需要使用 js 文件中的函数。这个文件经常更新,所以每次客户端加载页面时我都需要动态加载这个文件。我怎么能做到这一点?谢谢!
【问题讨论】:
标签: javascript node.js
所以,在我的 nodeJS 服务器部分,我需要使用 js 文件中的函数。这个文件经常更新,所以每次客户端加载页面时我都需要动态加载这个文件。我怎么能做到这一点?谢谢!
【问题讨论】:
标签: javascript node.js
使用require 从其他文件加载代码。然而,一旦你 require'd 一个文件,再次要求它不会再次从磁盘加载文件,而是从 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 */ }
};
【讨论】:
require.cache 可能包含完整路径名,console.log(require.cache) 某处以了解您的文件在其中的存储方式。
除了@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');
它可以清除所有模块,并处理正则表达式。
【讨论】:
这个非常简单的脚本让我很开心 :) github.com/isaacs/node-supervisor
第一:
npm install supervisor -g
秒:
supervisor myapp.js
我有一些错误,但它有效。
【讨论】: