gpt4 book ai didi

javascript - Node JS 覆盖标准模块

转载 作者:数据小太阳 更新时间:2023-10-29 05:06:03 25 4
gpt4 key购买 nike

friend 问了一个有趣的问题,我尝试了一些方法但无济于事,有什么方法可以覆盖 Node JS 模块吗?

例如,我想覆盖 readFile 函数以使用 S3 存储桶而不是文件系统。即:

var fs = require('fs');

fs.readFile('my_text_file.txt', ...);

实际上是这样运行的

FileSystem.readFile = function () {
// Connect to S3 and retrieve remote file
}

我已经尝试过原型(prototype),但似乎他们已经设置了没有 __proto__ 对象的 native 模块,他们没有 .constructor 属性意味着任何东西给任何人。

我考虑过使用 Nodes VM但这太严格了,因为我希望用户能够通过 npm 安装模块并使用它们。

我实际上最接近的是创建一个新模块(因为我不能将名为 fs.js 的文件放入我的 node_modules 文件夹并需要它;它只是被忽略了),只是将 fs 的值硬设置为我想要的值,但这不太正确,我希望用户使用 require('fs') 并使用我的自定义函数。

如果不编译我自己的 Node JS 版本,这是完全可能的吗?

最佳答案

我觉得有必要强烈警告您不要覆盖 native 函数。话虽如此,这将起作用:

main.js:

var fs = require('fs'),
oldReadFile = fs.readFile;

fs.readFile = function (filename, options, callback) {
console.log('hey!');
oldReadFile(filename, options, callback)
};

var other = require('./other');
other.test();

其他.js:

var fs = require('fs');

exports.test = function () {
fs.readFile('./main.js', {encoding: 'utf8'}, function (err, data) {
console.log(err, data);
});
};

您需要用您自己的脚本包装您的用户脚本,以首先覆盖您想要的内容。

关于javascript - Node JS 覆盖标准模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com