React-native 打包程序配置 - 如何将 .zip 文件包含在包中?

React-native packager configuration - How to include .zip file in bundle?

我的问题:

.

export function readAssetFile(name) {
  if(Platform.OS === 'ios') {
    return RNFS.readFile(`${RNFS.MainBundlePath}/assets/data/${name}`);
  } else {
    return RNFS.readFileAssets(`raw/${name}`, 'base64');
  }
}

我的项目结构如下:

ProjectDir
  android
  data
    image1.png
    image2.png
    firmwarefile.zip
  ios

android 分支有效,因为我在我的 .gradle 中添加了构建步骤以将 firmwarefile.zip 复制到 ProjectDir/android/app/src/main/assets/raw。所以我可以调用 readAssetFile('firmwarefile.zip'),它 returns 数据。

在 iOS,所有图像文件(Image1.png、Image2.png)都包含在 MyProject 中。app/assets/data/ 我无需执行任何操作,但 zip他们旁边的文件不是。

查看实际的打包程序代码(来自 metro 项目),似乎(基于 metro/src/defaults.js)打包程序默认不包含 zip 文件,但是packager 可以配置为包含其他文件类型。但是我找不到 任何 文档来说明我将如何进行配置。

很抱歉这个问题看起来很简单,但我已经尝试将此 zip 包含在我的包中大约 4 个小时了。我正在诉诸手动输入 console.logs 和错误抛出来跟踪 metro 内的东西,试图找到我应该在我的配置中发送的位置。

版本: 反应本机:0.55.3 地铁:0.30.2

这是一个 hack,但它完成了:

  • 将您的 zip 二进制文件转换为 base64 字符串
  • 把它放在 .js 文件中,la module.exports = "<your base64 data goes here>"
  • 在您需要 zip 文件的文件中,使用 import myZipFileAsBase64 from './hacky-base64-file.js';

这是一个快速创建 base64 文件的脚本:

var fs = require('fs');

function prepareZip(file, outJs) {
  const b64 = fs.readFileSync(file, 'base64');

  fs.writeFileSync(outJs, `module.exports = ${JSON.stringify(b64)};`);
}

prepareZip('./data/myFirmware.zip', './hacky-base64-file.js');