Dav*_*osh 6 javascript node.js
朋友问了一个有趣的问题,我尝试过一些东西,但无济于事,有没有办法覆盖Node JS模块?
例如,我想覆盖readFile函数以使用S3存储桶而不是文件系统.IE:
var fs = require('fs');
fs.readFile('my_text_file.txt', ...);
Run Code Online (Sandbox Code Playgroud)
实际上运行这样的东西
FileSystem.readFile = function () {
// Connect to S3 and retrieve remote file
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了原型,但似乎他们已经设置了没有__proto__对象的原生模块,他们没有.constructor任何对任何人都有意义的属性.
我已经考虑过使用Nodes VM,但这太严格了,因为我希望用户能够通过它来安装模块npm并使用它们.
我真正来的最接近的是创建一个新模块(因为我不能放置fs.js在我的node_modules文件夹中命名的文件并且需要它;它只是被忽略)并且只是将值设置为fs我想要的但是这不是'非常正确,我希望用户使用require('fs')并使用我的自定义功能.
如果没有编译我自己的Node JS版本,这是否可行?
Lau*_*rin 11
我觉得有必要强烈警告你不要重写本机功能.话虽如此,这将有效:
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();
Run Code Online (Sandbox Code Playgroud)
other.js:
var fs = require('fs');
exports.test = function () {
fs.readFile('./main.js', {encoding: 'utf8'}, function (err, data) {
console.log(err, data);
});
};
Run Code Online (Sandbox Code Playgroud)
您需要使用自己的脚本包装用户的脚本,以首先覆盖您想要的内容.
| 归档时间: |
|
| 查看次数: |
7404 次 |
| 最近记录: |