朋友提出了一个有趣的问题,我尝试了一些方法但无济于事,有没有办法覆盖 Node JS 模块?
例如,我想覆盖 readFile 函数以使用 S3 存储桶而不是文件系统。IE:
var fs = require('fs');
fs.readFile('my_text_file.txt', ...);
实际上运行这样的东西
FileSystem.readFile = function () {
// Connect to S3 and retrieve remote file
}
我已经尝试过原型,但似乎他们已经设置了没有__proto__
对象的本机模块,他们没有.constructor
对任何人都有意义的属性。
我曾考虑过使用Nodes VM,但这太严格了,因为我希望用户能够通过安装模块npm
并使用它们。
我实际上最接近的是创建一个新模块(因为我不能将一个名为的文件fs.js
放在我的node_modules
文件夹中并要求它;它只是被忽略)并且只是将值硬设置为fs
我想要的值,但这不是完全正确,我希望用户使用require('fs')
和使用我的自定义功能。
如果不编译我自己的 Node JS 版本,这是否可能?