如何使用 Webpack 的“raw-loader”加载二进制文件?

Nik*_*nko 5 webpack

Webpack 的加载器通常加载文本文件,因此在大多数情况下,使用某种文本编码(通常是 UTF-8)转换加载文件的内容会更方便。另一方面,二进制文件不应该被转换,因此加载器有一个raw属性,它控制(每个加载器)是否应该应用 UTF-8 转换。

raw-loader应该将原始数据从文件加载到字符串而不进行任何转换,因此应该将属性导出rawtrue. 然而,事实并非如此,而且还有一个单元测试应该确保raw不被导出。它似乎被设计为仅用于基于文本的格式。

有没有办法解决?将二进制文件加载到字符串的替代方法有哪些?

小智 7

raw-loader软件包似乎只能正确加载仅包含 7 位字符代码 0-127 的文本文件,而不能正确处理 >=128 的字节值。

作为解决方案,请使用binary-loader可以将完整 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);
}
Run Code Online (Sandbox Code Playgroud)