NodeJS需要('./path / to / image / image.jpg')作为base64

时间:2015-07-06 09:05:19

标签: node.js require

有没有办法告诉require如果文件名以.jpg结尾,那么它应该返回它的base64编码版本吗?

var image = require('./logo.jpg');
console.log(image); // data:image/jpg;base64,/9j/4AAQSkZJRgABAgA...

2 个答案:

答案 0 :(得分:6)

我担心“为什么”,但这里是“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()的常规使用),你只能将图像加载到缓存中一次(在文件发生变化后第二次需要图像时,仍会产生第一个缓存版本,除非您手动开始清理模块缓存。)

换句话说:你真的不想要这个。

答案 1 :(得分:1)

您可以使用fs.createReadStream("/path/to/file")