如何在不全局修改 fs 的情况下执行 Promise.promisfyAll(fs)(在编写库时)?

How to do Promise.promisfyAll(fs) without globally modifying fs (when writing a library)?

A​​FAICT,如果我正在编写一个库并使用 Promise.promisifyAll(fs);,这会修改 fs 模块(而不是返回修改后的副本)。因此,如果有人导入我的库,这也会为他们修改 fs 的副作用。

有没有办法避免这种情况?

您可以为不想更改的全局使用包装器对象:

var Promise = require('bluebird');
var fs = Promise.promisifyAll(function(orig) {
    var myFs = {};
    for (var m in orig)
        myFs[m] = orig[m]; // .bind(orig); is probably unnecessary
    return myFs;
}(require('fs')));