Webpack 图像加载器编码中断
Webpack image loader encoding breaks
我正在尝试创建用于图像处理的 webpack 加载程序。它应该非常简单明了:找到扩展名为 /.png$/ 的所需模块,将其写入我的测试文件。根据 loader API,我收到模块的内容作为加载程序函数的第一个参数。但我不太明白我收到的是什么编码。据我所知,PNG 文件是二进制文件,但 javascript 字符串按照规范采用 UTF16 编码。
我写了一些代码:
webpack.config.js
let path = require("path");
module.exports = {
entry: "./index.js",
output: {
filename: "bundle.js"
},
module:{
rules:[
{
test: /\.png$/i,
use: [
{
loader: path.resolve('./loader.js'),
}
]
}
]
},
watch: true
};
loader.js
let getOptions = require('loader-utils').getOptions;
var fs = require("fs");
module.exports = function(source){
fs.writeFileSync("my.png", source, "binary");
return "";
};
就我而言,我最初的想法是我可以做一些事情,比如读取源代码到 Buffer 并将它的编码设置为 UTF-16,然后将这个 Buffer 写入文件,但是那没有工作。
问题是我应该如何处理源以将其写入文件并从源创建有效的 png。因为现在我得到的只是一堆错误,比如 "cannot open file...".
我偶然发现了答案,它只是写
module.exports.raw = true;
在我的装载机里。这样加载程序将真正获得原始缓冲区。否则我得到的缓冲区被识别为 UTF-8 编码。很奇怪,考虑到 javascript 字符串按照规范
是 UTF-16
我正在尝试创建用于图像处理的 webpack 加载程序。它应该非常简单明了:找到扩展名为 /.png$/ 的所需模块,将其写入我的测试文件。根据 loader API,我收到模块的内容作为加载程序函数的第一个参数。但我不太明白我收到的是什么编码。据我所知,PNG 文件是二进制文件,但 javascript 字符串按照规范采用 UTF16 编码。
我写了一些代码:
webpack.config.js
let path = require("path");
module.exports = {
entry: "./index.js",
output: {
filename: "bundle.js"
},
module:{
rules:[
{
test: /\.png$/i,
use: [
{
loader: path.resolve('./loader.js'),
}
]
}
]
},
watch: true
};
loader.js
let getOptions = require('loader-utils').getOptions;
var fs = require("fs");
module.exports = function(source){
fs.writeFileSync("my.png", source, "binary");
return "";
};
就我而言,我最初的想法是我可以做一些事情,比如读取源代码到 Buffer 并将它的编码设置为 UTF-16,然后将这个 Buffer 写入文件,但是那没有工作。
问题是我应该如何处理源以将其写入文件并从源创建有效的 png。因为现在我得到的只是一堆错误,比如 "cannot open file...".
我偶然发现了答案,它只是写
module.exports.raw = true;
在我的装载机里。这样加载程序将真正获得原始缓冲区。否则我得到的缓冲区被识别为 UTF-8 编码。很奇怪,考虑到 javascript 字符串按照规范
是 UTF-16