Мое мнение таково, что вам не следует думать о наличии трех приложений для трех разных клиентов, если вы хотите максимально увеличить повторное использование кода. Я мог бы думать об этом как об одном приложении, которое имеет разные пути кода в зависимости от того, какой клиент обращается к нему.
Конечно, это в конечном итоге зависит от того, на каком уровне повторного использования кода вы стреляете. Модели, как правило, проще всего поделиться. В зависимости от того, насколько отличается ваш пользовательский интерфейс, вам может быть сложно обмениваться контроллерами и представлениями.
Я попытаюсь ответить на некоторые конкретные вопросы ...
Гит
Самый простой способ повторно использовать код - это просто иметь одно приложение и репозиторий. В противном случае вы можете использовать подмодули Git для совместного использования кода в репозиториях.
Упаковка активов
Это сильно зависит от того, какое решение по упаковке активов вы выберете. С одним приложением / репо вы должны будете сконфигурировать свою систему упаковки активов, чтобы потенциально выполнять оптимизированные сборки для каждого клиента, если вас беспокоит размер активов JS. При наличии нескольких приложений / репозиториев каждое из них будет иметь свою собственную конфигурацию.
Совместное использование кода
Я думаю, что одна из самых сильных сторон Ember по сравнению с другими средами - это мощная объектная модель. При необходимости вы можете легко создать подкласс общего объекта, чтобы добавить специфичное для клиента поведение.