Реактивная конфигурация упаковщика - Как включить файл .zip в комплект? - PullRequest
0 голосов
/ 27 июня 2018

Моя проблема:

  • У меня есть zip-файл, содержащий обновление прошивки для устройства моей компании
  • Я хочу иметь возможность получить к нему доступ с помощьюact-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 ), кажется (основываясь на metro / src / defaults.js), что файлы zip по умолчанию не включены упаковщиком, но Упаковщик может быть настроен на включение файлов других типов. Но я не могу найти любую документацию о том, как я могу выполнить эту настройку.

Извините за то, что похоже на действительно простой вопрос, но я пытался включить этот почтовый индекс в свой пакет в течение ~ 4 часов. Я прибегаю к ручному вводу console.logs и ошибок, чтобы отследить вещи в метро, ​​чтобы попытаться найти, куда мне следует отправлять данные в моей конфигурации.

Версии: React-native: 0.55.3 Метро: 0.30.2

1 Ответ

0 голосов
/ 27 июня 2018

Это взлом, но он это делает:

  • Преобразование вашего 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...