NodeJS require('./path/to/image/image.jpg') 作为 base64
NodeJS require('./path/to/image/image.jpg') as base64
有没有办法告诉 require
如果文件名以 .jpg
结尾,那么它应该 return base64 编码版本?
var image = require('./logo.jpg');
console.log(image); // data:image/jpg;base64,/9j/4AAQSkZJRgABAgA...
您可以使用fs.createReadStream("/path/to/file")
我担心 "why",但这里是 "how":
var Module = require('module');
var fs = require('fs');
Module._extensions['.jpg'] = function(module, fn) {
var base64 = fs.readFileSync(fn).toString('base64');
module._compile('module.exports="data:image/jpg;base64,' + base64 + '"', fn);
};
var image = require('./logo.jpg');
此机制存在一些严重的问题:首先,您以这种方式加载的每个图像的数据将保留在内存中,直到您的应用程序停止(因此它对加载大量图像没有用),并且由于该缓存机制(也适用于 require()
的常规使用),您只能将图像加载到缓存中一次(第二次需要图像,在其文件更改后,仍会产生第一个 - 缓存 -版本,除非您手动开始清理模块缓存)。
换句话说:你不是真的想要这个。
有没有办法告诉 require
如果文件名以 .jpg
结尾,那么它应该 return base64 编码版本?
var image = require('./logo.jpg');
console.log(image); // data:image/jpg;base64,/9j/4AAQSkZJRgABAgA...
您可以使用fs.createReadStream("/path/to/file")
我担心 "why",但这里是 "how":
var Module = require('module');
var fs = require('fs');
Module._extensions['.jpg'] = function(module, fn) {
var base64 = fs.readFileSync(fn).toString('base64');
module._compile('module.exports="data:image/jpg;base64,' + base64 + '"', fn);
};
var image = require('./logo.jpg');
此机制存在一些严重的问题:首先,您以这种方式加载的每个图像的数据将保留在内存中,直到您的应用程序停止(因此它对加载大量图像没有用),并且由于该缓存机制(也适用于 require()
的常规使用),您只能将图像加载到缓存中一次(第二次需要图像,在其文件更改后,仍会产生第一个 - 缓存 -版本,除非您手动开始清理模块缓存)。
换句话说:你不是真的想要这个。