新手求问关于代码热更新和缓存清理的问题
发布于 3 年前 作者 NautiIoidea 1525 次浏览 来自 问答

新手一枚,现在在尝试写一个electron桌面程序,其中有一个类的代码有可能在程序使用中发生变化,因此把它写成了r=require.reslove(‘这个类的js文件路径’)的形式然后使用delete require.cache[r]; r = require.reslove(‘这个类的js文件路径’) 删除掉缓存再重新require期望能够不用重启程序就改变这一部分。但是从最终的效果来看这个类并没有发生变化。希望各位大神能不吝指点一下我正确的处理方式

2 回复

可以参考一下这段代码

function clearCache(modulePath) {
  let moduleOld = require.cache[modulePath]
  if (moduleOld && moduleOld.parent) {
    moduleOld.parent.children.splice(moduleOld.parent.children.indexOf(moduleOld), 1)
  }
  delete require.cache[modulePath];
}

function clearDirCache(moduleDirPath) {
  let stat = fs.statSync(moduleDirPath);
  if (stat.isDirectory()) {
    let filenameList = fs.readdirSync(moduleDirPath);
    for (let i = 0; i < filenameList.length; i++) {
      const filename = filenameList[i];
      clearDirCache(path.resolve(moduleDirPath, filename));
    }
  } else if (stat.isFile()) {
    clearCache(moduleDirPath)
  }
}

@cn-ix 好的,我尝试了一下您的方法,确实起到了我所期望的效果,十分感谢

回到顶部