Подтвердить что ты не робот

Как создать несколько приложений из одной базы кода в Angular

Я работаю над приложением angular. Мы основывали наше приложение на https://github.com/Swiip/generator-gulp-angular, и все работает нормально. Этот проект angular seed в основном сканирует все ваши JS файлы в каталоге и объединяет их в один JS файл, когда вы входите в производство.

Мы создаем бэкэнд администратора для биллинговой системы. Теперь клиент также хочет "публичный бэкэнд" для всех своих клиентов. Место, где клиенты, и входить в систему и отправлять сообщения в основном. Пользовательский интерфейс является одинаковым для общего бэкэнд, мы могли бы повторно использовать одни и те же директивы повсюду. Единственная проблема заключается в том, что публичный бэкэнд крошечный, а бэкэнд администратора огромен. Я не думаю, что использование полного админ-приложения для случайного клиента - хорошая практика.

Как мне создать два приложения из одной и той же базы кода?

4b9b3361

Ответ 1

Не обслуживать два приложения из одной и той же базы кода. Это рецепт катастрофы. Это грубая схема того, как я буду справляться с этим:

  • Аудит приложения, которое вы уже создали. Определите, какие компоненты можно повторно использовать между двумя проектами, и укажите, что в качестве базового проекта проекта.
  • Если вы строите вещи с учетом модульности, это не должно быть обратным торможением. Возможно, вам понадобится рефакторинг, чтобы попасть в правильное положение. John Papa Angular Styleguide будет отличным местом, чтобы помочь на этом фронте (это было здорово, как я узнал Angular).
  • Превратите этот базовый проект в зависимость бауэр, который может быть обновлен независимо от вашего пользовательского кода приложения. Подробнее о создании пакета Bower здесь. Может быть, вы даже можете открыть исходный код, что вы создали?!?
  • Создайте пользовательские функции поверх своей модульной базы. Каждая группа пользовательских функций будет одним из ваших приложений (в вашем случае это звучит как панель администратора и общедоступное приложение).
  • После запуска вы можете управлять приложениями с помощью одной команды продуктов, если они в основном одинаковы. Определите, какие функции являются общими, создайте их в базовом приложении и разверните эти изменения с помощью bower для двух ваших пользовательских приложений. Добавить в пользовательские функции для каждого проекта; если кодовые базы расходятся достаточно, вы можете разделить их на две группы продуктов.

Как уже отмечалось другими, вы могли бы управлять приложениями с помощью хорошего инструмента построения, такого как Grunt/ Gulp, который бы использовал ваши общие зависимости.

Ответ 2

Я тоже не согласен с принятым ответом. Поддержание одной кодовой базы значительно проще и менее трудоемко и будет благоприятным, если ваш проект будет расширяться в еще большее количество приложений, которые необходимо развернуть и построить независимо.

Определение сборки

В каждом приложении должен быть один файл app.js, определяющий, какие компоненты нужно импортировать и сделать сборку. Структура может выглядеть примерно так:

components
-- component-1
-- component-2
-- component-3
app-1
-- app.js
app-2
-- app.js

Чтобы создать приложение-1, нам нужны компоненты 1 и 3, поэтому в app-1/app.js мы бы определили:

require('../components/component-1/file.js')
require('../components/component-3/file.js')

Если вы хотите развернуть отдельно параметры, связанные с пользователем, вы можете создать модуль UserSettings с его собственными маршрутами и включить компоненты, необходимые этому модулю. Этот модуль затем будет включен в сборку вашего приложения. То же самое можно было бы применить к маршрутам, конфигурации, прогонам и т.д. - оптимально все они относятся к одному модулю или компоненту.

Зависимости

В какой-то момент вы столкнетесь с вопросом, хотите ли вы связывать зависимости для всех приложений за один раз или создавать набор для каждого приложения отдельно. Единственное решение, с которым я столкнулся до сих пор, заключается в том, чтобы заручиться ручным списком зависимостей для каждого приложения и выполнить набор на основе этого списка, но я уверен, что есть лучший способ.

Ответ 3

Я не согласен с представленными здесь вариантами. Идея разделить мою базу кода на 3 разных проекта была бы осуществима, если бы я строил повторно используемые компоненты. Но я просто разделяю свое приложение. Эти части не будут повторно использоваться ни в одном из моих других проектов, поскольку они специфичны для проекта.

Накладные расходы на поддержку 3 разных проектов (зависимости, создание, документация, выпуск, управление версиями) не стоят.

Я считаю, что поиск импорта ES6 (с помощью Webpack или System.js) или RequireJS - гораздо лучший вариант, однако я не знаю, как они будут работать в экосистеме Angular1.X.