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
, написание логики, тестирование.