You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Обновил руководство по использованию FSD с NuxtJS, т.к. текущее руководство не покрывает всю арзитектуру и создает недопонимания в комьюнити.
Также разработал свой модуль, который предоставляет конфигурацию из коробки.
Если у вас есть рекомендации по улучшению гайда и модуля, буду рад их прочитать.
- Изначально, NuxtJS предлагает файловую структуру проекта без папки `src`, то есть в корне проекта.
9
9
- Файловый роутинг находится в папке `pages`, а в FSD эта папка отведена под плоскую структуру слайсов.
10
+
- Автоимпорты работают для всех компонентов, в то время как FSD пропагандирует концепцию Public API (делится только необходимым из index файлов).
10
11
12
+
Но NuxtJS обладает довольно гибкой настройкой конфигурации, что поможет нам полноценно внедрить в него FSD, не теряя его основных достоинств со стороны разработки:
11
13
12
-
## Добавление алиаса для `src` директории
14
+
- Автоимпорты.
15
+
- Файловый роутинг.
13
16
14
-
Добавьте обьект `alias` в ваш конфиг:
15
-
```ts title="nuxt.config.ts"
16
-
exportdefaultdefineNuxtConfig({
17
-
devtools: { enabled: true }, // Не относятся к FSD, включёны при старте проекта
18
-
alias: {
19
-
"@": '../src'
20
-
},
21
-
})
22
-
```
23
-
## Выбор способа настройки роутера
17
+
## Автоимпорты
24
18
25
-
В NuxtJS есть два способа настройки роутинга - с помощью конфига и с помощью файловой структуры.
26
-
В случае с файловым роутингом вы будете создавать index.vue файлы в папках внутри директории app/routes, а в случае конфига - настраивать роуты в `router.options.ts` файле.
19
+
На первый взгляд автоимпорты противоречат концепции Public Api и FSD, т.к. создает импорты для всех компонентов, но этого можно избежать, правильно настроив конфигурацию.
27
20
21
+
### Компоненты
28
22
29
-
### Роутинг с помощью конфига
23
+
По умолчанию в NuxtJS для компонентов выделена дирректория `components/`.
30
24
31
-
В слое `app` создайте файл `router.options.ts`, и экспортируйте из него обьект конфига:
32
-
```ts title="app/router.options.ts"
33
-
importtype { RouterConfig } from'@nuxt/schema';
25
+
Дирректории для компонентов можно переопределить настройкой `components`.
34
26
35
-
exportdefault <RouterConfig> {
36
-
routes: (_routes) => [],
37
-
};
27
+
#### shared
38
28
29
+
```ts
30
+
components: {
31
+
dirs: [
32
+
{
33
+
path: "~/src/shared", // shared дирректория
34
+
pattern: "**/*index.vue", // Файл для автоимпорта
35
+
extensions: ["vue"],
36
+
},
37
+
];
38
+
}
39
39
```
40
40
41
-
Чтобы добавить страницу `Home` в проект, вам нужно сделать следующие шаги:
42
-
- Добавить слайс страницы внутри слоя `pages`
43
-
- Добавить соответствующий роут в конфиг `app/router.config.ts`
41
+
#### entities
44
42
43
+
```ts
44
+
components: {
45
+
dirs: [
46
+
{
47
+
path: "~/src/entities", // entities дирректория
48
+
extendComponent(component) {
49
+
component.pascalName=component.pascalName.replaceAll("Ui", ""); // Убираем Ui дирректории из имени компонента
50
+
returncomponent;
51
+
},
52
+
pattern: "**/*index.vue", // Файл для автоимпорта
53
+
extensions: ["vue"],
54
+
},
55
+
];
56
+
}
57
+
```
45
58
46
-
Для того чтобы создать слайс страницы, воспользуемся [CLI](https://github.com/feature-sliced/cli):
59
+
#### features
47
60
48
-
```shell
49
-
fsd pages home
61
+
```ts
62
+
components: {
63
+
dirs: [
64
+
{
65
+
path: "~/src/features", // features дирректория
66
+
extendComponent(component) {
67
+
component.pascalName=component.pascalName.replaceAll("Ui", ""); // Убираем Ui дирректории из имени компонента
0 commit comments