FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

feat(labs): `Lab6` add tutorial · iu5git/JavaScript@851e5be · GitHub

Commit 851e5be

Browse files
committed
feat(labs): Lab6 add tutorial
1 parent d97238e commit 851e5be

9 files changed

Lines changed: 110 additions & 0 deletions

‎tutorials/lab6/README.md‎

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# ЛР №6. Сборка фронтенда. Раздача фронтенда в качестве статики.
2+
3+
## Цель
4+
5+
Разобраться, как осуществляется сборка клиентской части приложения. Добавить в бекенд приложение возможность раздачи клиентской части в качестве статики во избежание проблем с CORS.
6+
7+
## План
8+
9+
1. Сборка через `Vite`.
10+
2. Раздача фронтенда в качестве статики.
11+
12+
## 1. Сборка через `vite`.
13+
14+
[Vite ](https://vite.dev/) - современная популярная система сборки для фронтенд приложений. [Добавим](https://vite.dev/guide/#manual-installation) `vite` в проект клиентской части с карточками (ЛР №3).
15+
16+
1. Перейдем в папку с фронтендом:
17+
18+
```bash
19+
cd your-lab3-folder
20+
```
21+
22+
2. Установим `vite`:
23+
24+
```bash
25+
npm install -D vite
26+
```
27+
28+
3. Добавим команды в `package.json`:
29+
30+
```json
31+
// package.json
32+
{
33+
"scripts": {
34+
"dev": "vite", // start dev server, aliases: `vite dev`, `vite serve`
35+
"build": "vite build", // build for production
36+
"preview": "vite preview" // locally preview production build
37+
}
38+
}
39+
```
40+
41+
4. Добавим `vite.config.js`:
42+
43+
```js
44+
// vite.config.js
45+
export default {
46+
build: {
47+
outDir: './public',
48+
emptyOutDir: true,
49+
},
50+
};
51+
```
52+
53+
Готово!
54+
55+
Выполним `npm run dev` и зайдем на `http://localhost:5173/`, чтобы убедиться, что все работает (бекенд должен быть предварительно запущен).
56+
![Dev](assets/dev.png)
57+
58+
Выполнив `npm run build`, убедимся, что появляется папка `public` с собранной клиентской частью:
59+
![alt text](assets/build-public.png)
60+
61+
Также можно посмотреть превью сборки, выполнив команду `npm run preview`. В этом режиме фронтенд запускается в production-режиме, из результатов сборки в `public`.
62+
63+
Dev-режим (запуск через `vite` - ` npm run dev` или vs-code плагин`live-server`):
64+
![Before structure](assets/before-structure-dev.png)
65+
66+
Preview-режим (запуск через `vite` - `npm run preview`):
67+
![alt text](assets/after-structure-public.png)
68+
69+
## 2. Раздача фронтенда в качестве статики.
70+
71+
Если сейчас зайти на `http://localhost:3000/`, то ничего отображаться не будет и более того, будет ошибка:
72+
![Not found](assets/not-found.png)
73+
74+
Чтобы бекенд раздавал клиентскую часть в качестве статики нужно выполнить несколько действий:
75+
76+
1. Скопировать папку сборки `public` в проект с бекендом:
77+
![Public in backend](assets/public-in-backend.png)
78+
79+
2. Указать при запуске NestJS сервера, что нужно раздавать содержимое `public` в качестве статики:
80+
81+
```ts
82+
// main.ts
83+
...
84+
import { NestExpressApplication } from '@nestjs/platform-express';
85+
import { resolve } from 'path';
86+
87+
async function bootstrap() {
88+
const app = await NestFactory.create<NestExpressApplication>(AppModule);
89+
90+
app.useStaticAssets(resolve(__dirname, '..', 'public'));
91+
92+
await app.listen(process.env.PORT ?? 3000);
93+
}
94+
95+
...
96+
```
97+
98+
- `app.useStaticAssets(resolve(__dirname, '..', 'public'));` - указывает приложению путь к ассетам
99+
100+
- Дополнительно нужно указать дженерик `NestExpressApplication` при создании экземляра приложения, чтобы ts понимал, что в качестве низкоуровневого фреймворка используется `express` (`useStaticAssets` как раз метод express-сервера)
101+
102+
Готово!
103+
104+
Если перезапустить NestJS сервер и зайти на `http://localhost:3000/`, можно убедиться, что теперь и карточки отображаются, и запросы выполняются и нет нужды обходить CORS, поскольку запросы выполняются с того же домена.
105+
![Frontend and backend](assets/frontend-and-backend.png)
106+
107+
Итоговая структура приложения с бекендом из ЛР №4:
108+
![Final backend](assets/final-backend.png)
109+
110+
## Дополнительные материалы
70.8 KB
LoadingViewer requires iframe.
84.1 KB
LoadingViewer requires iframe.
56.8 KB
LoadingViewer requires iframe.

‎tutorials/lab6/assets/dev.png‎

1.67 MB
LoadingViewer requires iframe.
108 KB
LoadingViewer requires iframe.
1.73 MB
LoadingViewer requires iframe.
36.8 KB
LoadingViewer requires iframe.
70.1 KB
LoadingViewer requires iframe.

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL