如何解决检查 node.js 文件是否为 require.cached
编辑:我正在使用 main.js 或任何其他文件中的以下函数来加载其他文件。在我的情况下,我使用 chokidar 重新加载更改文件
function requireUncached(modulePath) {
delete require.cache[require.resolve(modulePath)];
return require(modulePath);
}
requireUncached('./test.js')
运行以下代码:
while(true) {
// Edit: file_loaded is referring to the current file where this code resides
if (!file_loaded) // file_loaded is the part I need help with
break;
// do something
// eg:
console.log('hello')
await new Promise(resolve => setTimeout(resolve,1000))
}
当这个文件被卸载(或用新版本重新加载)时,它将继续运行并无限期地打印“hello”。
我尝试设置一个全局变量来通知循环终止。但这也会干扰新缓存的文件。
有没有办法获取节点区域/上下文是否已缓存?或者有没有办法完全停止/销毁正在运行的上下文?
编辑:这是一个您可以尝试的简单示例:
main.js
function requireUncached(modulePath) {
delete require.cache[require.resolve(modulePath)];
return require(modulePath);
}
requireUncached('./test.js')
requireUncached('./test.js')
requireUncached('./test.js')
test.js
init()
async function init() {
while (true) {
console.log('hello')
await new Promise(resolve => setTimeout(resolve,1000))
}
}
运行:node main.js
注意 'Hello' 是如何每秒打印 3 次而不是 1 次,因为使用 delete require.cache 时异步函数不会停止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。