微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决检查 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 举报,一经查实,本站将立刻删除。