CNode

新手求问关于代码热更新和缓存清理的问题

问答
NNautiIoidea发布于5 年前最后回复5 年前2 回复2116 浏览0 收藏

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

查看回复

回复 (2)

C
cn-ix#1·5 年前

可以参考一下这段代码

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)
  }
}
N
NautiIoidea#2·5 年前
引用 cn-ix可以参考一下这段代码

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

参与回复
登录后即可参与回复。登录