Схема 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)
Другие вопросы по тегам