Как создать несколько приложений с помощью 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
Теперь у вас есть несколько приложений с одной командой.