Как создать несколько приложений с помощью angular -cli?

Свойство apps в файле angular-cli.json имеет тип массива. Если я добавлю второй элемент в этот массив, как я могу инструктировать ng build для сборки обоих элементов?

Ответы

Ответ 1

В настоящее время v1.0.0 вы можете выбрать приложение, которое вы хотите создать, с помощью следующей команды:

ng build -a appName

или

ng build --app appName

вам также потребуется добавить свойство name к каждому элементу массива apps, чтобы у вас было что-то вроде этого:

"apps": [ { "name": "app1", "root": "src/app1root", ... }, { "name": "app2", "root": "src/app2root", ... }, ... ]

также вы можете использовать индексы приложений, такие как ng build -a 0 или ng build -a 1, в этом случае вам не нужно указывать имена приложений.

Из angular -cli sorces вы можете видеть, что нет возможности запускать все приложения в одной команде, вы должны либо указать индекс либо имя приложения иначе apps[0] будет использоваться, поэтому вы не сможете одновременно создавать все приложения, используя один вызов ng build.

Ответ 2

Я искал исходный код angular-cli, но не мог найти ссылку на код, который выполняет итерацию или иным образом проверяет содержимое apps как массив.

На данный момент (angular-cli версия 1.0.0-beta.15) каждый экземпляр кода, который имеет дело с apps, использует первый элемент массива hardcoded (apps[0]). Кажется, что нет способа выбрать приложение для создания или изменения поведения по умолчанию с использованием первого элемента массива.

Схема JSON для элемента apps описывает это следующим образом:

Свойства различных приложений в этом проекте.

/**
 * Properties of the different applications in this project.
 */
apps?: {
    root?: string;
    outDir?: string;
    assets?: string;
    index?: string;
    main?: string;
    test?: string;
    tsconfig?: string;
    prefix?: string;
    mobile?: boolean;
    /**
     * Global styles to be included in the build.
     */
    styles?: string[];
    /**
     * Global scripts to be included in the build.
     */
    scripts?: string[];
    /**
     * Name and corresponding file for environment config.
     */
    environments?: {
        [name: string]: any;
    };
}[];

Кажется, что будущее намерение проекта состоит в поддержке создания нескольких приложений из одной и той же базы кода, но не похоже, что сейчас это что-то выполнимое (версия 1.0.0-beta.15).

Ответ 3

Тем не менее для ng build --app нет флага для создания всех приложений с одной командой, поэтому лучший способ решить это - создать файл Makefile в корне проекта:

my-app
  --dist/
  --e2e/
  --src/
  .angular-cli.json
  package.json
  Makefile 

Makefiles позволяет организовать компиляцию кода в соответствии с инструкциями, которые вы предоставили. Поэтому нам нужно предоставить инструкцию по созданию интерфейса для всех приложений в выходной каталог. Теперь файл Makefile выглядит следующим образом:

help:
    @echo "_______BUILD ANGULAR FRONTEND______\n"
    @echo "To build all apps run make make build-frontend"

build-frontend:
    ng build -a=0 &&\
    ng build -a=1 

Однако после того, как вы скопируете код выше, измените пробелы на вкладку. В противном случае вы получите недопустимый Makefile с *** missing separator error

Перейдите в корневой проект и просто проверьте, введите make в терминал, и вы должны получить распечатку справки. После этого типа:

make build-frontend

Теперь у вас есть несколько приложений с одной командой.