在 Electron 中使用 fs 模块操作 .asar
格式文件,当执行删除操作时,很容易会遇到文件被占用的问题:
操作无法完成,因为文件已在 Electron 中打开
这是因为 require('fs')
是被 Electron 重写了,读取 .asar
格式文件时会当做目录处理。使用 fs 对象的方法对 .asar
文件路径的读取,都会产生对 asar
目录的引用。如:
import fs from 'fs'; const asarFile = 'test.asar'; fs.existsSync(asarFile); // true fs.rmSync(asarFile); // Failed!
若想将 .asar
格式文件当做普通文件处理,则应使用 require('original-fs')
,它会返回未经重写的 fs 对象。
参考如下示例代码对比一下即可明白:
import fs from 'fs'; import ofs from 'original-fs'; const asarFile = 'test.asar'; ofs.statSync(asarFile).isFile(); // true fs.statSync(asarFile).isFile(); // false fs.statSync(asarFile).isDirectory(); // true
所以当希望将 asar
文件当做普通文件处理时,应使用 original-fs
模块。示例:
import ofs from 'original-fs'; const asarFile = 'test.asar'; ofs.existsSync(asarFile); // true ofs.rmSync(asarFile); // success!