Схема ClassOptions - угловая схема - PullRequest
0 голосов
/ 28 января 2019

В @ angular-devkit / schematics readme я запутался в том, что делает 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 Ответ

0 голосов
/ 31 января 2019

Файл schema в примере является файлом машинописного текста, созданным с помощью этой функции во время процесса сборки в angular-cli.Это шаблон, используемый в angular-cli, и пример не будет работать как есть.Вы можете увидеть полный пример источника для такой схемы в одной из официальных угловых схем, таких как service .

Однако имейте в виду, 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)
...