有没有办法告诉require
如果文件名以.jpg
结尾,那么它应该返回base64编码版本呢?NodeJS需要('./ path/to/image/image.jpg')作为base64
var image = require('./logo.jpg');
console.log(image); // data:image/jpg;base64,/9j/4AAQSkZJRgABAgA...
有没有办法告诉require
如果文件名以.jpg
结尾,那么它应该返回base64编码版本呢?NodeJS需要('./ path/to/image/image.jpg')作为base64
var image = require('./logo.jpg');
console.log(image); // data:image/jpg;base64,/9j/4AAQSkZJRgABAgA...
我担心“为什么”,但这里是“如何”:
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()
),则只能将图像加载到缓存中一次(在文件发生更改后需要第二次映像,仍会产生第一个缓存版本,除非您手动开始清理模块缓存) 。
换句话说:你不需要这个。
您可以使用fs.createReadStream("/path/to/file")
我需要使用'require('./ logo.jpg')'! – vbarbarosh
你为什么要“需要”? 'fs'模块是访问文件系统的正确方式。 –
@vbarbarosh为什么require('./ logo.jpg')不应该被使用的另一个原因是,当你需要时,NodeJs会开始解释它,这意味着该文件应该有有效的js代码。 – KlwntSingh
我有一个专门用于前端的库。里面有很多require('./ path/to/image.jpg')。他们通过browserify-transform-tools进行了转换。所以最后我有一个.js文件,它将被浏览器使用。目前我需要从nodejs使用这个lib。直到你的答案,我只有一个选择 - 编译,然后由节点使用。现在我不需要在每次更改时重新编译所有内容。 – vbarbarosh
使用此方法的一个很好的理由是测试,其中在最终版本中未确定或上传到CDN。 – jchnxu
Anothe的原因,是favicon。或者aws lambda。 –