- создан src/index.ts с реэкспортом 14 чистых функций и типов - перенесён findNearestTemplatesDir из completion.ts в templateUtils.ts - обновлён package.json: main → dist/index.js, добавлено поле types - добавлен declaration: true в tsconfig.json для генерации .d.ts - документирован API в README.md и README_RU.md - версия поднята до 0.2.0
5.5 KiB
5.5 KiB
Генератор файлов из шаблонов
CLI-утилита для генерации файлов и структуры папок из настраиваемых шаблонов.
Установка
Быстрый запуск через npx
npx @gromlab/create <шаблон> <имя>
Глобальная установка ( Рекомендуется )
При глобальной установке доступна команда create с автодополнением имен шаблонов.
1. Установка:
npm i -g @gromlab/create && create install-autocomplete
2. Перезагрузка оболочки:
# macOS (zsh)
source ~/.zshrc
# Linux (bash)
source ~/.bashrc
# Linux (fish)
exec fish
Использование
create <шаблон> <имя> [путь] [опции]
Если [путь] не указан, файлы создаются в директории, где запущен CLI.
Пример
# Создать компонент из шаблона
create component Button
# Указать папку вывода позиционно
create component Button src/components
Шаблоны
Шаблоны хранятся в папке .templates/ в корне проекта. Каждая подпапка — отдельный шаблон.
Создание шаблона
- Создайте папку в
.templates/с именем шаблона - Добавьте файлы и папки, используя переменные в именах и содержимом
- Переменные заключаются в двойные фигурные скобки:
{{переменная}}
Количество переменных не ограничено — используйте любые имена.
Структура
.templates/
├── component/
│ └── {{name.pascalCase}}/
│ ├── index.ts
│ ├── {{name.pascalCase}}.tsx
│ └── {{name.pascalCase}}.module.css
└── zustand-store/
└── {{name.camelCase}}Store/
├── index.ts
├── {{name.camelCase}}Store.ts
└── {{name.camelCase}}Store.type.ts
Переменные
Переменные подставляются в имена файлов/папок и в содержимое файлов. В шаблоне можно использовать любые переменные — при генерации CLI потребует значения для всех найденных.
name— обязательная переменная, задается позиционным аргументом- Произвольные переменные передаются через флаги:
--author "John Doe"
Модификаторы регистра:
| Синтаксис | Результат для myButton |
|---|---|
{{name}} |
myButton |
{{name.pascalCase}} |
MyButton |
{{name.camelCase}} |
myButton |
{{name.kebabCase}} |
my-button |
{{name.snakeCase}} |
my_button |
{{name.screamingSnakeCase}} |
MY_BUTTON |
# Шаблон с переменными {{name}} и {{author}}
create component Button --author "John Doe"
Пример содержимого шаблона
// {{name.pascalCase}}.tsx
import styles from './{{name.pascalCase}}.module.css'
export const {{name.pascalCase}} = () => {
return <div className={styles.wrapper}>{{name.pascalCase}}</div>
}
Опции
| Опция | Описание |
|---|---|
--overwrite |
Перезаписать существующие файлы |
--skip-update |
Не проверять обновления CLI |
--<переменная> <значение> |
Произвольная переменная шаблона |
Программный API
Пакет можно использовать как библиотеку:
import { buildPlan, writePlan, collectTemplateVariables } from '@gromlab/create';
| Функция | Назначение |
|---|---|
renderTemplate(input, vars) |
Подставляет переменные и модификаторы в строку |
collectTemplateVariables(templateDir) |
Собирает все имена переменных из шаблона |
listTemplateNames(templatesDir) |
Список доступных шаблонов (подпапки) |
findNearestTemplatesDir(startDir) |
Ищет .templates вверх по дереву каталогов |
readDirRecursive(dir) |
Рекурсивный список всех файлов в каталоге |
resolveTemplateContext(templatesDir, name, vars) |
Валидация шаблона и переменных |
buildPlan(templateDir, outDir, vars, files) |
Построение плана генерации (source → target) |
writePlan(plan, vars, overwrite) |
Запись файлов на диск по плану |
getCollisions(plan) |
Список файлов из плана, которые уже существуют |
getExistingDirs(outDir, dirs) |
Проверка существующих директорий |
getTopLevelDirs(outDir, plan) |
Директории верхнего уровня из плана |
getRoots(outDir, plan) |
Корневые пути для итогового вывода |
CASE_MODIFIERS |
Словарь модификаторов регистра |