fsd-generator
v1.4.1
Published
CLI tool for generating Feature-Sliced Design (FSD) structure
Downloads
45
Maintainers
Readme
FSD CLI
CLI утилита для быстрого создания структуры компонентов по методологии Feature-Sliced Design (FSD).
Установка
Глобальная установка (рекомендуется)
Используйте npm для глобальной установки:
npm install -g fsd-generatorПроверка установки:
fsd
# Должна показаться справкаПримечание: Для глобальной установки рекомендуется использовать
npm, а неyarn global, так как npm корректно настраивает PATH и бинарники работают сразу после установки.
Локальная установка в проект
npm install --save-dev fsd-generator
# или
yarn add -D fsd-generatorПосле установки используйте через npx или yarn:
npx fsd -t widget -n calendar
# или
yarn fsd -t widget -n calendarИспользование
Инициализация FSD структуры
fsd initАвтоматически определяет тип проекта и создаёт структуру папок:
- Next.js:
src/_shared/,src/_widgets/,src/_features/,src/_entities/(с подчеркиванием) - React:
src/shared/,src/widgets/,src/features/,src/entities/(без подчеркивания)
Создание компонентов
fsd -t <тип> -n <имя>Создание нескольких компонентов за раз
Вариант 1: Отдельные папки (как раньше)
fsd -t widget -n calendar,button,headerСоздаст три отдельные папки: calendar/, button/, header/
Вариант 2: Несколько компонентов в одной папке
fsd -t widget -n form -c Button,Input,SelectСоздаст папку form/ui/ с компонентами Button.tsx, Input.tsx, Select.tsx
Вариант 3: Плоская структура (без папки ui)
fsd -t shared -n icons --flat CloseIcon,ArrowIconСоздаст компоненты напрямую в src/_shared/icons/ без папки ui
Вариант 4: Добавить в существующую папку
fsd -t widget -n header/ui CheckboxДобавит Checkbox.tsx в существующую папку src/_widgets/header/ui/
Параметры
-t, --type- Тип компонента (обязательно):widget- создаст вsrc/_widgets/(Next.js) илиsrc/widgets/(React)feature- создаст вsrc/_features/(Next.js) илиsrc/features/(React)entity- создаст вsrc/_entities/(Next.js) илиsrc/entities/(React)shared- создаст вsrc/_shared/(Next.js) илиsrc/shared/(React)
Стиль определяется автоматически по типу проекта или существующим папкам.
-n, --name- Имя компонента или папки (обязательно)-c, --components- Список компонентов через запятую для создания в одной папке--flat- Создать плоскую структуру без папкиui
Примеры
# Инициализация структуры FSD
fsd init
# Создать один виджет
fsd -t widget -n calendar
# Создать несколько виджетов в отдельных папках
fsd -t widget -n calendar,button,header
# Создать несколько компонентов в одной папке
fsd -t widget -n form -c Button,Input,Select,Textarea
fsd -t shared -n ui/icons -c CloseIcon,ArrowIcon,BurgerIcon
# Создать плоскую структуру (без ui папки)
fsd -t shared -n icons --flat CloseIcon,ArrowIcon
fsd -t widget -n header/ui Button --flat
# Добавить компонент в существующую папку
fsd -t widget -n header/ui Checkbox
fsd -t shared -n ui/icons NewIcon
# Создать фичу user-profile
fsd -t feature -n user-profile
# Создать сущность blog-post
fsd -t entity -n blog-postЧто создаётся
При инициализации (fsd init)
Next.js проект - создаётся структура с подчеркиванием:
src/
├── _shared/
│ └── index.ts
├── _widgets/
│ └── index.ts
├── _features/
│ └── index.ts
├── _entities/
│ └── index.ts
└── index.tsReact проект - создаётся структура без подчеркивания:
src/
├── shared/
│ └── index.ts
├── widgets/
│ └── index.ts
├── features/
│ └── index.ts
├── entities/
│ └── index.ts
└── index.tsТакже автоматически настраивается tsconfig.json с путями для FSD:
Next.js (с подчеркиванием):
{
"compilerOptions": {
"paths": {
"@shared/*": ["./src/_shared/*"],
"@widgets/*": ["./src/_widgets/*"],
"@features/*": ["./src/_features/*"],
"@entities/*": ["./src/_entities/*"]
}
}
}React (без подчеркивания):
{
"compilerOptions": {
"paths": {
"@shared/*": ["./src/shared/*"],
"@widgets/*": ["./src/widgets/*"],
"@features/*": ["./src/features/*"],
"@entities/*": ["./src/entities/*"]
}
}
}Теперь можно использовать импорты:
import { Button } from "@shared/ui";
import { Header } from "@widgets/header";
import { UserProfile } from "@features/user-profile";При создании компонента (fsd -t widget -n calendar)
Для команды fsd -t widget -n calendar создаётся следующая структура:
Next.js (с подчеркиванием):
src/_widgets/calendar/
├── ui/
│ ├── Calendar.tsx
│ └── index.ts
└── index.tsReact (без подчеркивания):
src/widgets/calendar/
├── ui/
│ ├── Calendar.tsx
│ └── index.ts
└── index.tsТакже автоматически добавляется экспорт в соответствующий index.ts:
export * from "./calendar";Стиль определяется автоматически по существующим папкам в проекте.
При создании нескольких компонентов
Вариант 1: Отдельные папки
fsd -t widget -n calendar,button,headerСоздаст все три компонента в отдельных папках с проверками на существование.
Вариант 2: В одной папке
fsd -t widget -n form -c Button,Input,SelectСоздаст структуру:
src/_widgets/form/
├── ui/
│ ├── Button.tsx
│ ├── Input.tsx
│ ├── Select.tsx
│ └── index.ts # export * from "./Button"; export * from "./Input"; ...
└── index.ts # export * from "./ui";Вариант 3: Плоская структура
fsd -t shared -n icons --flat CloseIcon,ArrowIconСоздаст структуру:
src/_shared/icons/
├── CloseIcon.tsx
├── ArrowIcon.tsx
└── index.ts # export * from "./CloseIcon"; export * from "./ArrowIcon";Calendar.tsx
import React from "react";
interface CalendarProps {
}
export function Calendar({}: CalendarProps) {
return (
<div className="calendar">
</div>
);
}Требования
- Node.js >= 12.0.0
- npm (для глобальной установки)
- Проект должен иметь папку
srcв корне
Решение проблем
Если при установке возникают проблемы, см. TROUBLESHOOTING.md
Важно: Для глобальной установки используйте npm install -g, а не yarn global add. Yarn global может вызывать проблемы с PATH.
Лицензия
MIT
