Схема ClassOptions - угловая схема
В readme@ angular-devkit / schematics я запутался в том, что делает ClassOptions.
Если вы добавите код в проект, он покажет ошибку, потому что этот файл не существует.
Мысли о том, что это используется для + пример?
import { strings } from '@angular-devkit/core';
import {
Rule, SchematicContext, SchematicsException, Tree,
apply, branchAndMerge, mergeWith, template, url,
} from '@angular-devkit/schematics';
import { Schema as ClassOptions } from './schema';
export default function (options: ClassOptions): Rule {
return (tree: Tree, context: SchematicContext) => {
if (!options.name) {
throw new SchematicsException('Option (name) is required.');
}
const templateSource = apply(
url('./files'),
[
template({
...strings,
...options,
}),
]
);
return branchAndMerge(mergeWith(templateSource));
};
}
1 ответ
schema
Файл в примере является файлом машинописного текста, созданным с помощью этой функции во время процесса сборки в angular-cli
, Это шаблон, используемый в angular-cli
и пример не будет работать как есть. Вы можете увидеть полный пример источника для такой схемы в одной из официальных угловых схем, таких как сервис.
Однако имейте в виду, ClassOptions
это просто объект, который определяет параметры для угловой схемы. Он может прийти откуда угодно и отделен от библиотеки схем. Ответственность за предоставление опций для библиотеки схем лежит на инструменте.
Вот аналогичный пример, используя ссылку cli.
Создайте простую схему:
schematics blank --name=test
Добавить путь к файлу схемы в collection.json
:
{
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
"schematics": {
"test": {
"description": "A blank schematic.",
"factory": "./test/index#test",
"schema": "./test/schema.json"
}
}
}
Создать schema.json
:
{
"$schema": "http://json-schema.org/schema",
"id": "MySchema",
"title": "My Schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"default": "cactus"
}
}
}
Завод в index.ts
теперь будут переданы параметры по умолчанию из schema.json
файл.
import { Rule, SchematicContext, Tree } from "@angular-devkit/schematics";
// You don't have to export the function as default. You can also have more than one rule factory
// per file.
export function test(_options: any): Rule {
return (tree: Tree, _context: SchematicContext) => {
tree.create(_options.name || "hello", "world");
return tree;
};
}
Запустите cli по умолчанию из schema.json
:
schematics .:test --dry-run=false
...
CREATE /cactus (5 bytes)
запустите cli с пользовательскими опциями:
schematics .:test --name=bean--dry-run=false
...
CREATE /bean (5 bytes)