如何使用Webpack';加载二进制文件;“原始加载程序”?
Webpack的加载程序通常加载文本文件,因此在大多数情况下,使用一些文本编码(通常是UTF-8)转换加载文件的内容更方便。另一方面,二进制文件不应该被转换,因此有一个for loaders,它控制(每个loader)是否应该应用UTF-8转换如何使用Webpack';加载二进制文件;“原始加载程序”?,webpack,Webpack,Webpack的加载程序通常加载文本文件,因此在大多数情况下,使用一些文本编码(通常是UTF-8)转换加载文件的内容更方便。另一方面,二进制文件不应该被转换,因此有一个for loaders,它控制(每个loader)是否应该应用UTF-8转换 raw loader应该将原始数据从文件加载到字符串,而不进行任何转换,因此它应该将raw属性导出为true似乎是合乎逻辑的。但是,它没有,而且还有一个可以确保不导出raw。它似乎是专为基于文本的格式设计的 这有什么办法吗?将二进制文件加载到字符串的替代
raw loader
应该将原始数据从文件加载到字符串,而不进行任何转换,因此它应该将raw
属性导出为true
似乎是合乎逻辑的。但是,它没有,而且还有一个可以确保不导出raw
。它似乎是专为基于文本的格式设计的
这有什么办法吗?将二进制文件加载到字符串的替代方法是什么?原始加载程序包似乎只正确加载仅由7位字符代码0-127组成的文本文件,而不能正确处理字节值>=128 作为解决方案,使用可以将完整的8位字节值加载到javascript字符串格式的
二进制加载程序
包。如有必要,可以将字符串转换为Uint8Array
例如:
// load contents of local file "test.bin" into a js string:
import binAsString from "!!binary-loader!./test.bin";
// if necessary, convert the imported string to Uint8Array:
let array = new Uint8Array(binAsString.length);
for (let i = 0; i < binAsString.length; i++) {
array[i] = binAsString.charCodeAt(i);
}
//将本地文件“test.bin”的内容加载到js字符串中:
从“!!二进制加载器!/test.bin”导入二进制字符串;
//如有必要,将导入的字符串转换为Uint8Array:
让数组=新的Uint8Array(binAsString.length);
for(设i=0;i
我也遇到了同样的问题,找到了一个更干净的解决方案。使用url加载程序
并关闭选项中的编码。您还必须通过修改mimetype
和generator
设置来删除它们的默认包装。这是我在webpack.config.js
中使用的工作示例
module: {
rules: [
{
test: /\.bin$/,
exclude: /node_modules/,
use: [
{
loader: 'url-loader',
options: {
encoding: false,
mimetype: false,
generator: (content) => {
return content;
}
},
},
],
}
],
},
这应该逐字节导入文件。然后,您可以抓取缓冲区并将其放入您选择的TypedArray构造函数中。不适用于此解决方案