Переменные, которые вы определяете, будут определенно зависеть от поведения вашей схемы.Например, у меня есть новая схема приложения с пользовательской переменной, позволяющей пользователям указывать тип аутентификации для скаффолдинга в приложении:
Чтобы вызвать эту схему из командной строки,пользователь будет вводить ng new my-application-schematic-with-sso --collection=@simple-schematic --authentication=SSO
(x-prompt
предоставляет пользователю список параметров, если переключатель командной строки не указан явно. См. также Угловая ng-новая схема для параметров стиля .
"authentication": {
"description": "The authentication strategy to use",
"default": "None",
"x-prompt": {
"message": "Which authentication strategy would you like to use?",
"type": "list",
"items": [
{
"value": "None",
"label": "None"
},
{
"value": "SSO",
"label": "SSO"
}
]
}
},
Эта схема также использует шаблон argv
для захвата имени рабочей области:
"name": {
"description": "The name of the workspace",
"type": "string",
"$default": {
"$source": "argv",
"index": 0
}
},...
Таким образом, синтаксис командной строки для вызова этой схемы будет выглядеть примерно так: ng new my-new-schematic --collection=@simple-schematic
и сгенерирует новое рабочее пространство под названием my-new-schematic . Поскольку флаг --authentication
не указан, пользователю будет предложено выбрать либо Нет , либо SSO .
Одно важное поведение, связанное с определяемой вами схемой и переменными, может привести к проблеме undefined (особенно, если ваша переменная имеет значение по умолчанию)t значение), которое вы отметили в исходном вопросе, неправильно связывает схему со схемой.
Например, свойство schema
объекта схемы ng-new
указывает, как преобразовать предоставленные входные данные CLI.в соответствующий объект , переданный в пользовательскую схему.
{
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
"extends": "@schematics/angular",
"schematics": {
"ng-new": {
"description": "new workspace",
"factory": "./ng-new",
"schema": "./ng-new/schema.json"
}
}
}
Два разных снимка экрана при отладке тестов в зависимости от того, указано свойство schema
или нет:
И снова со схемой, явно указанной: