反应本机打包程序配置 - 如何在bundle中包含.zip文件?



我的问题:

  • 我有一个 zip 文件,其中包含我公司设备的固件更新
  • 我希望能够使用下面的代码使用 react-native-fs 访问它

.

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中添加了一个构建步骤,将固件文件.zip复制到ProjectDir/android/app/src/main/assets/raw中。 所以我可以调用readAssetFile('固件文件.zip'(,它返回数据。

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

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

很抱歉感觉像一个非常简单的问题,但我一直在尝试将此拉链包含在我的捆绑包中~4 小时了。 我正在手动放入 console.logs 和错误抛出来跟踪 Metro 内部的内容,以尝试找到我应该在我的配置中发送的位置。

版本: 反应原生:0.55.3 地铁: 0.30.2

这是一个黑客,但它可以完成它:

  • 将 zip 二进制文件转换为 base64 字符串
  • 把它贴在.js文件中,就像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');

最新更新