检查 node.js 文件是否为 require.cached

问题描述

我正在使用以下内容重新加载节点 js 文件

编辑:我正在使用 main.js 或任何其他文件中的以下函数来加载其他文件。在我的情况下,我使用 chokidar 重新加载更改文件

function requireUncached(modulePath) {
  delete require.cache[require.resolve(modulePath)];
  return require(modulePath);
}

假设我有一个名为 test.js 的文件

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 (将#修改为@)