Реактивная конфигурация упаковщика - Как включить файл.zip в комплект?
Моя проблема:
- У меня есть 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 ответ
Это взломать, но это сделано:
- Конвертируйте ваш 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');