
Привет, Хабр! Меня зовут Никита и я пишу сайты на React.
Эта статья — про создание шаблонов для ускорения написания кода, знакомство с двумя расширениями для VSCode, которые помогают создавать новые папки/файлы на потоке — то есть много и часто. Возможно, эти плагины пригодятся и вам.
В статье разберём:
Проблему
Какие есть решения
Плагины для VSCode
Немного теории и практики
Заключение
Проблема: Рутина замедляет прогресс

Часто приходится заниматься создании множества однотипных компонентов, включающих в себя React-компонент, индексный файл, файл с типами, стили, кастомные хуки, тесты, storybook и т.д. Каждый новый компонент – это несколько файлов, которые нужно создавать вручную, следя за соблюдением единого стиля и структуры проекта.
Самый простой наш компонент обычно выглядит так:

CustomComponent.module.css
– стилиCustomComponent.tsx
– реализация компонентаCustomComponent.types.ts
– определение типовindex.ts
– точка входа
Даже создание такой простой структуры занимает около 1-1.5 минуты, в то время как шаблон позволяет сделать это за 10-15 секунд. А если компонент сложный, с глубокой вложенностью и логикой, время увеличивается многократно.
Какие есть решения

Если нет желания сильно париться вот основные подходы:
Генераторы шаблонов:
Расширения VS Code:
Почему стоит выбрать Folder Templates вместо Plop/Hygen:
Минимум конфигурации — максимум пользы
В отличие от Plop и Hygen, Folder Templates не требует сложной настройки в JavaScript. Шаблон – это просто папка с файлами и небольшой конфигурационный файл.Интуитивно понятно
Документация проста и понятна, начать работать можно уже через 5 минут.Проста генерации вложенных структур
Вы просто создаете структуру папок и файлов, которую хотите получить, а расширение копирует ее, заменяя плейсхолдеры на нужные значенияНе требует зависимости от Node.js
Folder Templates работает без необходимости установки дополнительных зависимостей через npm. Это может быть плюсом в проектах, где хочется обойтись без npm-скриптов.
Plop/Hygen будет уместен, если вам нужны:
Сложная логика генерации (например, модификация уже существующих файлов);
Множественные шаги в сценарии генерации;
Интерактивные CLI-опросы и выбор опций.
Folder Templates: Практика создания шаблонов
Ссылочка на плагин - Folder Templates
Для создания шаблонов есть два варианта:
Создание шаблона в файловой системе
Настройка шаблона в
settings.json
VSCode
Мы рассмотрим создание шаблонов в файловой системе
Создаем папку .fttemplates
в корне проекта и сохраняем в ней необходимые шаблоны, к которым хотим получить доступ в этом проекте. Путь к этой папке можно изменить в настройках VS Code.


Значение <FTName> (для Windows используется [FTName]) интерполируется в имя компонента, которое вас просят ввести при создании структуры.Также есть возможность преобразовывать имя компонента и переменные с шаблоном <FTName | transformer> (<FTName % transformer> для Windows). Пока одна из нерешенных проблем, это то, что родительская папка не будет преобразовываться в необходимый формат.
Внутри папки .fttemplates
создаем структуру папок и файлов. Например:

Файл .ftsettings.json
содержит настройки для вашего шаблона. Вот пример:
{
"name": "ReactComponent",
"openFilesWhenDone": ["<FTName>.tsx", "<FTName>.module.css"],
"omitParentDirectory": false,
"overwriteExistingFiles": "never",
"customVariables": ["interfaceFirstProp", "interfaceFirstPropType=>string"]
}
Разберем параметры:
name
: Название папки, которая будет создана.openFilesWhenDone
: Список файлов, которые будут открыты в редакторе после создания компонента.omitParentDirectory
: Если установлено вtrue
, шаблон будет создан непосредственно в текущей папке. Иначе будет создана папка с именем шаблона внутри текущей папки. По умолчанию: false.overwriteExistingFiles
: Определяет, перезаписывать ли структуру, если папка с таким же именем уже существует. По умолчанию: 'never'.customVariables
: Список переменных, которые будут запрошены у пользователя при создании компонента. В данном случае, мы запрашиваем название первого пропса (interfaceFirstProp
) и его тип (interfaceFirstPropType
, по умолчанию выбралиstring
).
С остальными настройками можно познакомиться на страничке расширения.
Заглянем в структуру нашего компонента.

Пустой CSS файл.
Файл React-компонента. Здесь мы импортируем интерфейс с именем компонента и постфиксом Props, также стили из файла [FTName].module.css. Диструктурируем props interfaceFirstProp, который мы ранее определили в .ftsettings.json и ввели при создании компонента.
Файл с типами. Интерфейс состоит из 2х кастомных переменных, которые мы вводим на этапе создания компонента.
Индексный файл. Тут ничего сложного, просто импорт и последующий экспорт компонента
Чтобы создать компонент, щелкните правой кнопкой мыши по папке, в которой вы хотите создать компонент, и выберите "Create New Templated Folder" (или можно назначить горячую клавишу). Выберите шаблон, введите имя компонента и значения для кастомных переменных, если они есть.


Можно создавать любую вложенность, расширения файлов и тд.
TypeScript Barrel Generator: Автоматический экспорт модулей
Второй полезный плагин – TypeScript Barrel Generator . Он автоматизирует экспорт модулей в файл index.ts
.

Просто щелкните правой кнопкой мыши по папке и выберите "Export all modules". Плагин автоматически создаст или обновит файл index.ts
, содержащий все экспорты из файлов в этой папке. Также можно (даже нужно) добавить слушатель, чтобы плагин автоматически обновлял index.ts
при добавлении или удалении файлов.
В настройках VS Code можно выбрать формат экспорта:
export * from "./..."
– стандартный экспортexport { default as ... } from "./..."
– именованный экспорт по умолчанию
При необходимости есть возможность исключить из слушателя определенные файлы, переименовать дефолтный index.ts файл и еще пара настроек.
Заключение: Время – ценный ресурс

Использование Folder Templates в комбинации с TypeScript Barrel Generator значительно сократило время на создание компонентов. Мы устранили рутину, освободив время для более важных задач. Настройка этих инструментов и знакомство с документацией занимает немного времени, но экономия времени и повышение продуктивности стоят того.
Надеюсь, эта статья была полезна для вас. Не бойтесь экспериментировать и автоматизировать рутинные задачи – это ключ к повышению эффективности разработки!