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

时间:2018-06-27 14:42:54

标签: react-native react-native-fs

我的问题:

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

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

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

很抱歉,这是一个非常简单的问题,但是我一直在尝试将这个压缩包包含在我的捆绑包中大约4个小时。我求助于手动放入console.logs和错误抛出以跟踪Metro内部的情况,以尝试找到应该在配置中发送的位置。

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

1 个答案:

答案 0 :(得分:0)

这是一个hack,但可以成功完成:

  • 将您的zip二进制文件转换为base64字符串
  • 将其粘贴在.js文件中,例如module.exports = "<your base64 data goes here>"
  • 在需要压缩文件的文件中,使用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');