@ltd/j-fs v4.1.0
require('@ltd/j-fs')
原生文件系统模块的 promisify 扩展。
对于 require('fs') 模块的每一个有 fs.xxxSync 对应的 fs.xxx 方法,都生成一个 promisify 版本的 fs.xxxAsync 方法。
为方便某些使用场景,所有 fs.xxxSync 都可以通过 fs.sync.xxx 获取,所有 fs.xxxAsync 都可以通过 fs.async.xxx 获取。
与原生 require('util').promisify、require('fs').promises 实现上的差别
对于返回多个成功回调参数的
fs.read和fs.write方法,其promisify版仅保留其中的第一个(与fs.readSync和fs.writeSync一致)。
而在util.promisify中,会将多个回调参数作为一个对象的多个属性返回;fs.promises中目前尚未提供这两个方法。
注意:这并不意味着本模块今后默认对多成功返回参数的情况如此处理,而是考虑到fs.read和fs.write实际返回内容的必要性。对于废弃的
fs.exists方法,其promisify版本fs.existsAsync是基于fs.access方法实现的。 而这是util.promisify调用fs.exists无法实现的,fs.promises中则很可能永远不会提供这个方法。另外,
fs.createReadStream方法的promisify版本fs.createReadStreamAsync,是在ready事件触发后,返回原始返回对象,并在其上增加了异步遍历器接口。
而fs.createWriteStream方法的promisify版本fs.createWriteStreamAsync,是在ready事件触发后,返回原始返回对象,并在其上增加了writeAsync、endAsync方法。
这两个方法无法通过util.promisify直接实现,fs.promises中应该也不会提供这种实现。额外实现了
readUTF(path[,BOM],callback)(BOM===null时将自动剔除开头BOM字符)、readJSON(path[,reviver],callback)、writeJSON(path,data[,replacer[,space]],callback)三个方法(均有fs.xxx、fs.xxxAsync、fs.xxxSync三套)。
对 .asar 文件虚拟目录的支持
electron 环境下的 require('fs') 默认支持了将路径中的 .asar 文件作为文件夹访问的能力。
在 electron 环境中,本模块是基于 require('original-fs') 实现的(等价于原始 Node.js 环境下的 require('fs') 模块);
同时增加了一个属性 fs.asar,用于存放 electron 扩展后的方法,它的值是以与本模块相同的形式构建的。
其它情况下,本模块是直接基于 require('fs') 实现扩展的,并且没有 fs.asar 属性。