有沒有辦法告訴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。 –