#android #ios #react-native #babeljs #mobile-development
Вопрос:
Я пытаюсь реализовать приложение с белой меткой в react native, где я мог бы создать и объединить приложение без импорта «всего» из проекта.
Например, у меня может быть assets_app1
папка весом 10 МБ и assets_app2
весом 1 МБ. В конце концов я всегда получаю 11 МБ, независимо от того, какой проект я собираю и объединяю для производства.
Я проверил несколько источников о том, как создавать white-label flavours
на targets
Android и iOS соответственно, посмотрел babel-плагин-модуль-распознаватель, но не смог найти и создать идеальное решение.
Лучшее, что я смог найти, — это это решение с использованием babel resolver для установки корня проекта и использования только тех компонентов, которые необходимы для приложения.
что-то вроде этого:
const brandPath = `./App/brands/${process.env.APP_BRAND}`;
console.log(`Bundling for the brand: ${process.env.APP_BRAND}`);
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
['module-resolver', {
root: ['./App', brandPath, './App/brands/default']
}]
]
};
};
Тем не менее, я получаю набор всех файлов, включенных в проект, даже если я использую «require (» ./reallyLargeImage.png») где-то в одном проекте. Он всегда будет одного и того же размера.
Существует ли какое-либо решение для белой маркировки приложения RN, которое могло бы создавать и объединять только необходимые ресурсы для конкретной конфигурации? Является ли цель/ложь единственным способом?
Ответ №1:
Для этого есть плагин babel: babel-plugin-rn-white-label
, он выглядит старым, но это что-то. Вы можете добраться отсюда.
Если вы решите использовать этот плагин, вы можете специализировать ресурсы для каждого приложения. Например, у вас есть 3 приложения (a, b, c), в каждом приложении вы хотите использовать другое изображение, просто сохраните изображения как image.a.jpg, image.b.jpg, image.c.jpg. Вавилон автоматически выбирает при создании приложения. Допустим, если a и b используют одно и то же изображение, вы можете использовать image.jpg и image.c.jpg потому что image.jpg будет использоваться по умолчанию.
Я не проверял это, но попробовать стоило.