Некоторое время назад я создал гибридное приложение — web/android/ios, которое помогает подготовиться к тайскому экзамену по вождению — https://www.driving-exam-thailand.com. Приложение стало популярным, и я подумал о создании подобных приложений для других стран. Разница между другими приложениями в основном заключается в вопросах, поэтому я подумал, что было бы здорово иметь возможность создавать множество мобильных приложений из одного репозитория. Я проверил в Интернете, но не мог найти готового решения. После небольшой работы мне удалось создать хорошее рабочее решение, которое я представлю ниже.
/ ├── android/ ├── ios/ └── capacitor.config.ts
После добавления Capacitor в ваш проект (и android, и ios) вы можете видеть, что на самом деле Capacitor добавляет только 1 файл (capacitor.config.ts) и 2 папки (android/ и ios/). Поэтому я подумал, что на самом деле я могу просто переместить эти файлы в другое место, а затем собрать проект. К сожалению, я обнаружил, что для работы конденсатора нужны эти файлы в основной папке. На самом деле это не проблема, это означает, что мне просто нужно переместить эти файлы в основную папку, и после создания приложения я могу переместить их обратно туда, куда захочу.
/ ├── capacitor/ ├── th/ ├── android/ ├── ios/ └── capacitor.config.ts
Вы можете видеть выше новую структуру папок. Итак, теперь мне нужно автоматизировать перемещение файлов. Я нашел библиотеку npm — shelljs, которая позволяет запускать сценарии оболочки. Немного поиграв, я создал 2 скрипта и добавил ссылку на package.json.
// build-mobile.js const shell = require('shelljs'); const [country] = process.argv.slice(2); if (country) { // Move from localized folder to main folder shell.mv(`./capacitor/${country}/capacitor.config.ts`, `./capacitor.config.ts`); shell.mv(`./capacitor/${country}/android/`, `./android/`); shell.mv(`./capacitor/${country}/ios/`, `./ios/`); shell.rm(`-R`, `./capacitor/${country}/`); // You can add comands here for building your project } // clean-mobile.js const shell = require('shelljs'); const [country] = process.argv.slice(2); if (country) { // Move back from main folder to localized folder shell.mkdir(`./capacitor/${country}/`); shell.mv(`./capacitor.config.ts`, `./capacitor/${country}/capacitor.config.ts`); shell.mv(`./android/`, `./capacitor/${country}/android/`); shell.mv(`./ios/`, `./capacitor/${country}/ios/`); } // package.json { ... "scripts": { ... "build-mobile:th": "node ./build-mobile th", "clean-mobile:th": "node ./clean-mobile th", ...
Вы можете видеть, что скрипты действительно просты, они просто перемещают файлы между определенной папкой и основной. Теперь, если я хочу создать мобильное приложение для определенного региона, мне просто нужно запустить npm run build-mobile:[country] и после сборки очистить его с помощью npm run clean-mobile:[ страна]. Я думаю, что это чистое и красивое решение.