Schematics — это мощный инструмент в экосистеме Angular, который позволяет автоматизировать процесс создания, модификации и поддержки кодовой базы. Это CLI-утилита, которая:
Schematics используются в Angular CLI (например, при командах ng generate component). Они работают на основе шаблонов и правил преобразования AST (Abstract Syntax Tree).
Создание собственного Schematics-генератора состоит из нескольких шагов:
npm install -g @angular-devkit/schematics-cli
schematics blank --name=my-generator
Эта команда создаст структуру проекта:
src/collection.json — описание доступных генераторов.src/my-generator — папка с основным генератором.Добавляем описание генератора:
{
"schematics": {
"my-generator": {
"description": "Генератор чего-то полезного",
"factory": "./my-generator/index#myGenerator"
}
}
}
В файле src/my-generator/index.ts:
import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
export function myGenerator(_options: any): Rule {
return (tree: Tree, _context: SchematicContext) => {
// Пример: создание файла
tree.create('/hello.txt', 'Это сгенерировано моим Schematics!');
return tree;
};
}
npm run build
schematics .:my-generator
Для теста в реальном Angular-проекте:
npm link путь/к/вашему/generator
ng generate ваш-generator:my-generator
npm publish
import { strings } from '@angular-devkit/core';
import { apply, mergeWith, Rule, template, url } from '@angular-devkit/schematics';
export function customComponent(options: any): Rule {
return mergeWith(
apply(url('./files'), [
template({
...strings, // Встроенные хелперы для работы с именами (например, dasherize)
...options,
}),
]),
);
}
В папке files можно разместить шаблоны, например __name@dasherize__.component.ts.
prompt().@angular-devkit/schematics-cli.collection.json, написание логики, тестирование.