如何使用Webpack';加载二进制文件;“原始加载程序”?

如何使用Webpack';加载二进制文件;“原始加载程序”?,webpack,Webpack,Webpack的加载程序通常加载文本文件,因此在大多数情况下,使用一些文本编码(通常是UTF-8)转换加载文件的内容更方便。另一方面,二进制文件不应该被转换,因此有一个for loaders,它控制(每个loader)是否应该应用UTF-8转换 raw loader应该将原始数据从文件加载到字符串,而不进行任何转换,因此它应该将raw属性导出为true似乎是合乎逻辑的。但是,它没有,而且还有一个可以确保不导出raw。它似乎是专为基于文本的格式设计的 这有什么办法吗?将二进制文件加载到字符串的替代

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

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构造函数中。

不适用于此解决方案