Skip to content

Commit 08de5e2

Browse files
committed
update base
1 parent 3e13da7 commit 08de5e2

9 files changed

Lines changed: 114 additions & 128 deletions

File tree

.storybook/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { StorybookConfig } from '@storybook/vue3-vite';
22

33
const config: StorybookConfig = {
4-
stories: ['@/components/**/*.stories.ts'],
4+
stories: ['../src/components/**/*.stories.ts'],
55
addons: [
66
'@chromatic-com/storybook',
77
'@storybook/addon-docs',

.storybook/vitest.setup.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

README.md

Lines changed: 71 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,91 +2,112 @@
22

33
В этом репозитории представлен пример простейшего фронтенд-сервиса с Vue.js.
44

5+
_Большая часть команд и инструкций написаны для операционных систем Linux и MacOS._
56

6-
*Большая часть команд и инструкций написаны для операционных систем Linux и MacOS.*
7+
## Использование
78

8-
## Зависимости
9-
- Node.js v18 – среда исполнения на языке JavaScript/TypeScript
10-
- NPM – консольный менеджер пакетов для установки библиотек (идет в поставке с Node.js)
11-
- Vue.js – фраемворк для разработки фронтенда
12-
- Vite – консольный менеджер для удобства работы с Vue.js
13-
- Storybook - фреймворк для разраобтки и документации компонентов и экранов.
14-
15-
## Frontend разработка на Vue.js
9+
TODO: Библиотека можно будет установить из npm под скоупом @profcomff. Она будет устанавливаться как плагин, и внедрять в глобальный скоуп приложения все компоненты -- по аналогии с vuetify. Все наши компоненты будут иметь приставку `Vu` (Viribus Unitis): `VuButton`, `VuTag` и т.д.
1610

17-
Фронтенд (англ. front end, frontend) — презентационная часть web приложения, её пользовательский
18-
интерфейс и связанные с ним компоненты.
11+
TODO: Для референса нужно будет захостить собранный сторибук.
1912

20-
В данном примере используется популярный фраемворк [Vue.js](https://vuejs.org/). Разработка ведется
21-
на языке TypeScript.
13+
## Зависимости
2214

15+
- Node.js >= v18 – среда исполнения на языке JavaScript/TypeScript
16+
- NPM – консольный менеджер пакетов для установки библиотек (идет в поставке с Node.js)
17+
- Vue.js – фреймворк для разработки фронтенда
18+
- Vite – консольный менеджер и инструмент сборки для удобства работы с Vue.js
19+
- Storybook – фреймворк для разраобтки и документации компонентов и экранов.
2320

2421
## Разработка
2522

2623
Для удобства разработки в VS Code создан [workspace](../frontend.code-workspace) с преднастроенными
2724
командами и рекомендованными расширениями для работы.
2825

26+
### Начало работы
27+
2928
Перед началом работы нужно установить зависимости командой
29+
3030
```
3131
pnpm install
3232
```
3333

34-
Для локального запуска необходимо выполнить команду
34+
Если используешь VS Code, то следует настроить автоформатирование:
35+
36+
1. Открыть файл с расширением `.vue`.
37+
2. Открыть палитру команд (Help > Show All Commands или `Ctrl+Shift+P`)
38+
3. Ввести и выбрать `Format document with`.
39+
4. Выбрать `Configure Default Formatter`.
40+
5. Выбрать `Prettier`.
41+
42+
Теперь можно форматировать файлы с помощью `Shift+Alt+F`. Еще можно настроить автоформатирование при сохранении файла (File > Preferences > Settings, Format on save).
43+
44+
### Работа со Storybook
45+
46+
Для локального запуска Storybook необходимо выполнить команду
47+
3548
```
36-
pnpm dev
49+
pnpm sb
3750
```
3851

39-
Для локального запуска Storybook необходимо выполнить команду
52+
На localhost порте 6006 откроется storybook. Он поддерживает перезагрузку при изменении кода (hot module replacement), но иногда может что-то кешировать -- тогда лучше перезапустить.
53+
54+
В левой вкладке будут перечислены все истории -- это могут быть компоненты, наборы компонентов или целые экраны. При нажатии на них можно посмотреть на то, как компонент выглядит, попробовать поменять какие-то его параметры и посмотреть, как он реагирует на события (например, нажатие).
55+
56+
Создание компонента:
57+
58+
1. В папке `/src/components/` создай папку с названием компонента (например, `button`).
59+
2. Создай в этой папке файл `Vu{НазваниеКомпонента}.vue` и в нем описываем шаблон компонента.
60+
3. Стилизуй компонент с помощью классов vuetify.
61+
4. Опиши модели и пропы, которые может принимать компонент. С помощью /\*\* \*/ опиши пропы и модели (так автоматически генерируется документация).
62+
5. В этой же папке создай `Vu{НазваниеКомпонента}.stories.ts`.
63+
6. В этом файле опиши meta, а потом истории -- различные состояния и опции компонента. Подробнее смотри в туториале Storybook или в уже написанных компонентах.
64+
65+
### Пулл-реквест
66+
67+
- Перед отправкой проверь стили: `pnpm check`
68+
- _Опционально_: более строгая проверка `pnpm check:hard`.
69+
- Заполни шаблон пулл-реквеста: что, как и зачем сделал
70+
- Запроси ревью
71+
72+
### Запуск приложения (опционально)
73+
74+
Для локального запуска приложения (чтобы проверять компоненты вне сторибука) необходимо выполнить команду
75+
4076
```
41-
pnpm storybook
77+
pnpm dev
4278
```
4379

44-
4580
## Инструкции
81+
4682
### Получение кода на свой компьютер
47-
Для работы с данным примером необходимо забрать его к себе на ПК. Для этого нужно:
48-
1. *(Опционально)* Если вы хотите далее опубликовать код на GitHub полезно сначала скопировать
49-
репозиторий к себе кнопкой Fork на GitHub. Кнопка доступна в правом верхнем углу
50-
[страницы репозитория](https://github.com/profcomff/app-template).
51-
2. Создайте папку в удобном вам расположении.
52-
- *Удобно создать папку на рабочем столе с названием вашего приложения.*
53-
3. Откройте приложение "Командная строка" или "Терминал", в зависимости от операционной системы.
54-
4. Прейдите в папку проекта командой `cd /путь/к/папке`.
55-
- Если вы пользователь windows и создали на рабочем столе папку `my_app`, то команда будет
56-
выглядеть так: `cd %userprofile%/Desktop/my_app`
57-
- Если вы пользователь linux или MacOS и создали на рабочем столе папку `my_app`, то команда
58-
будет выглядеть сделующим образом: `cd ~/Desktop/my_app`
59-
5. Склонируйте код репозитория к себе на ПК командой
60-
`git clone https://github.com/profcomff/app-template.git .` (точка в конце означает скачивание
61-
кода в текущую папку). Если вы выполнили пункт 1 используйте в команде ссылку из зеленой кнопки
62-
"Code" в правом верхнем углу вашего репозитория.
63-
6. Откройте код в удобной среде разработки. Рекомендуем использовать VSCode, который можно открыть
64-
из терминала командой `code .`
6583

66-
### Сборка и запуск приложения для публикации
67-
Сборка исходного кода в один пакет производится с помощью Docker. В этом случае создается
68-
независимый от операционной системы пакет, который можно без проблем разместить на любом сервере.
84+
1. Открой приложение "Командная строка" или "Терминал", в зависимости от операционной системы.
85+
2. Прейди в папку, где хочешь создать папку проекта, командой `cd /путь/к/папке`.
86+
- Если ты пользователь windows и хотите создать папку на рабочем столе, то команда будет
87+
выглядеть так: `cd %userprofile%/Desktop`
88+
- Если ты пользователь linux или MacOS и хочещб создать папку на рабочем столе, то команда
89+
будет выглядеть сделующим образом: `cd ~/Desktop/`
90+
3. Склонируй код репозитория к себе на ПК командой
91+
`git clone https://github.com/profcomff/ui-kit.git myapp` (вместо `myapp` подставь название папки, которая будет создана).
92+
4. Открой код в удобной среде разработки. Рекомендуем использовать VSCode, который можно открыть
93+
из терминала командой `code .`
6994

70-
Выполните команду `make` для сборки приложения. После окончания выполнения этой команды будет создан
71-
новый Docker образ с названием `my_app`, который можно запустить командой `make run`
95+
### Сборка библиотеки
7296

97+
TODO: Здесь будет описание сборки и публикации библиотеки на npm.
7398

7499
### Автосборка
100+
101+
TODO: Настроить на релиз.
102+
75103
Коммит в main запускает автоматическую сборку проекта средствами GitHub Actions. Настройки автосборки находятся в
76104
файле [.github/workflows/build_and_publish.yml](.github/workflows/build_and_publish.yml).
77105

78106
### Тесты на Pull Request
107+
79108
При создании запроса на слияние, автоматически создаются проверки кода юниттестами и на стили.
80109
Следующие тесты будут запущены:
110+
81111
- Проверки стилей `eslint`, `prettier`, `stylelint` на код в папке `frontend`
82112

83113
Настройки автотестов находятся в файле[.github/workflows/checks.yml](.github/workflows/checks.yml).
84-
85-
### Публикация готового приложения
86-
На данном этапе вам необходимо разместить приложение на каком-либо хостинге, поддерживающем протокол https.
87-
88-
Для этого подойдет любой VPS сервер, который вы можете найти в интернете. Мы рекомендуем использовать VPS сервера на операционной системе linux, для удобства размещения приложений и компонентов использовать Docker.
89-
90-
Чтобы получить SSL сертификаы для поддержки https можно использовать letsencrypt.com, предоставляющий SSL сертификаты бесплатно. Для удобства работы можно использовать веб сервер с встроенной поддержкой этих сертификатов, например Traefik или Caddy.
91-
92-
Шаблон приложения имеет уже готовые [Dockerfile](cicd/Dockerfile) для сборки вашего приложения, файл [docker-compose.production.yml](cicd/docker-compose.production.yml) с настройками развертывания приложения с Caddy Server и включенным https, а также базой данных PostgreSQL.

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
"build": "vue-tsc && vite build",
88
"docker-build": "vue-tsc && vite build --base=/ui",
99
"preview": "vite preview",
10-
"lint": "eslint src/ && pnpm lint:deadcode && pnpm lint:circular",
10+
"lint": "eslint src/",
1111
"lint:deadcode": "knip --exclude binaries,dependencies,unlisted",
1212
"lint:circular": "dpdm --exit-code circular:1 --no-tree --no-warning --progress false --transform ./src/main.ts",
1313
"format": "prettier src/ --write",
1414
"stylelint": "stylelint 'src/**/*.{vue,css}' --fix",
1515
"check": "vue-tsc && pnpm format && pnpm lint && pnpm stylelint",
16+
"check:hard": "vue-tsc && pnpm lint && pnpm lint:deadcode && pnpm lint:circular && pnpm format && pnpm stylelint",
1617
"test": "echo ok",
17-
"storybook": "storybook dev -p 6006",
18+
"sb": "storybook dev -p 6006",
1819
"build-storybook": "storybook build"
1920
},
2021
"dependencies": {
@@ -71,4 +72,4 @@
7172
"vue-tsc": "^2.2.6",
7273
"vuetify": "^3.7.14"
7374
}
74-
}
75+
}

src/App.vue

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,33 @@
1-
<script setup lang="ts">
2-
import { useProfileStore } from './store';
3-
import { onMounted } from 'vue';
4-
5-
const profileStore = useProfileStore();
6-
7-
onMounted(() => {
8-
profileStore.fromUrl();
9-
});
10-
</script>
1+
<script setup lang="ts"></script>
112

123
<template>
13-
<main class="container">
14-
<RouterView />
4+
<main class="container mt-8">
5+
<h1>Это репозиторий UI-kit Viribus Unitis</h1>
6+
<p class="mt-4">
7+
Здесь мы разрабатываем компоненты, общие для интерфейсов
8+
<a href="https://app.profcomff.com" target="_blank">Твой ФФ</a> и всех
9+
<a href="https://app.profcomff.com/apps" target="_blank">миниприложений</a>. База компонентов и стилей
10+
берется из <a href="https://vuetifyjs.com/en/components/all/" target="_blank">Vuetify</a>, а дизайн-система
11+
описана в нашей
12+
<a
13+
href="https://www.figma.com/design/gfvuDN9x7I7sFCJQ7b1bIz/%D0%A2%D0%B2%D0%BE%D0%B9-%D0%A4%D0%A4--%7C-Viribus?node-id=5399-18531&t=gqJoSlE0UHgEkayo-0"
14+
target="_blank"
15+
>Фигме</a
16+
>.
17+
</p>
18+
<p class="mt-2">
19+
В данном репозитории все немного отличается. Само приложение здесь может служить для отладки кода -- можешь
20+
добавить в App.vue свой компонент и посмотреть, как он работает. Сами компоненты и их документацию мы пишем
21+
в <a href="https://storybook.js.org/" target="_blank">Storybook</a> -- для локального запуска введи
22+
<code class="ml-1">pnpm sb</code>.
23+
</p>
1524
</main>
16-
<footer>
17-
Made by
18-
<a href="https://app.profcomff.com"><img src="https://app.profcomff.com/favicon.png" class="logo" /></a>
19-
in association with
20-
<a href="https://dyakov.space"><img src="https://dyakov.space/files/Icon.svg" class="logo" /></a>
21-
</footer>
2225
</template>
2326

2427
<style scoped>
2528
.container {
26-
width: 100%;
29+
width: min(100%, 900px);
30+
margin: auto;
2731
height: 100%;
2832
}
29-
30-
footer {
31-
position: sticky;
32-
bottom: 0;
33-
width: 100%;
34-
color: gray;
35-
text-align: center;
36-
37-
& .logo {
38-
height: 30px;
39-
vertical-align: middle;
40-
}
41-
}
4233
</style>

src/components/button/VuButton.stories.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import type { Meta, StoryObj } from '@storybook/vue3-vite';
2+
import { fn } from 'storybook/test';
23
import VuButton from './VuButton.vue';
34

45
const meta = {
56
title: 'Viribus Unitis/Button',
67
component: VuButton,
78
tags: ['autodocs'],
8-
args: {},
9+
args: {
10+
onClick: fn(),
11+
},
912
} satisfies Meta<typeof VuButton>;
1013

1114
export default meta;

src/components/button/VuButton.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
<script setup lang="ts"></script>
1+
<script setup lang="ts">
2+
defineEmits<{
3+
click: [];
4+
}>();
5+
</script>
26

37
<template>
4-
<v-btn class="text-body-1 font-weight-bold" color="brand-orange-4-notif" text="Привет"></v-btn>
8+
<v-btn
9+
class="text-body-1 font-weight-bold"
10+
color="brand-orange-4-notif"
11+
text="Привет"
12+
@click="$emit('click')"
13+
></v-btn>
514
</template>
615

716
<style lang="css" scoped></style>

vite.config.ts

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import svgLoader from 'vite-svg-loader';
66
import vue from '@vitejs/plugin-vue';
77
import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify';
88
import { fileURLToPath } from 'url';
9-
import path from 'node:path';
10-
import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
11-
const dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
129

1310
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
1411
export default defineConfig({
@@ -53,32 +50,4 @@ export default defineConfig({
5350
},
5451
],
5552
},
56-
test: {
57-
projects: [
58-
{
59-
extends: true,
60-
plugins: [
61-
// The plugin will run tests for the stories defined in your Storybook config
62-
// See options at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon#storybooktest
63-
storybookTest({
64-
configDir: path.join(dirname, '.storybook'),
65-
}),
66-
],
67-
test: {
68-
name: 'storybook',
69-
browser: {
70-
enabled: true,
71-
headless: true,
72-
provider: 'playwright',
73-
instances: [
74-
{
75-
browser: 'chromium',
76-
},
77-
],
78-
},
79-
setupFiles: ['.storybook/vitest.setup.ts'],
80-
},
81-
},
82-
],
83-
},
8453
});

vitest.shims.d.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)