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
Нажимаем `Добавить на главный экран`. Готово - иконка должна появиться на рабочем столе.
193
193
194
-
## 3. Добавление адаптивности
194
+
### Vite PWA
195
+
196
+
При работе с Vite так же существует более простой способ настройки PWA - библиотека vite-plugin-pwa.
197
+
Во-первых, необходимо установить библиотеку с помощью команды:
198
+
199
+
```shell
200
+
npm install -D vite-plugin-pwa
201
+
```
202
+
После этого необходимо настроить библиотеку в `vite.config.ts`
203
+
```ts
204
+
import { VitePWA } from'vite-plugin-pwa'
205
+
206
+
exportdefaultdefineConfig({
207
+
plugins: [
208
+
VitePWA({ registerType: 'autoUpdate' })
209
+
]
210
+
})
211
+
```
212
+
На данном этапе если вы развернете приложение на Github Pages или запустите его в режиме preview, то вы увидите работающий manifest.json, но его не будет при запуске в режиме dev.
213
+
Это происходит потому, что по умолчанию VitePWA не работает в режиме разработчика. Для того чтобы это исправить, можно добавить данное поле VitePWA в `vite.config.ts`
214
+
```ts
215
+
VitePWA({
216
+
registerType: 'autoUpdate',
217
+
devOptions: {
218
+
enabled: true,
219
+
},
220
+
})
221
+
```
222
+
223
+
Теперь, у нас есть и manifest, но при этом manifest, отображаемы на сервера — это созданный по умолчанию manifest, а не тот, который мы создали выше. Для указания собственного manifest его надо прописать как отдельное поле VitePWA в `vite.config.ts`
224
+
```ts
225
+
VitePWA({
226
+
registerType: 'autoUpdate',
227
+
devOptions: {
228
+
enabled: true,
229
+
},
230
+
manifest:{
231
+
name: "Tile Notes",
232
+
short_name: "Tile Notes",
233
+
start_url: "/",
234
+
display: "standalone",
235
+
background_color: "#fdfdfd",
236
+
theme_color: "#db4938",
237
+
orientation: "portrait-primary",
238
+
icons: [
239
+
{
240
+
"src": "/logo192.png",
241
+
"type": "image/png", "sizes": "192x192"
242
+
},
243
+
{
244
+
"src": "/logo512.png",
245
+
"type": "image/png", "sizes": "512x512"
246
+
}
247
+
],
248
+
}
249
+
})
250
+
```
251
+
Теперь перейдем к Service Worker. в vite-plugin-pwa уже есть работающий Service Worker который также производит кеширование, в отличие от прописанного нами. Данный Service Worker при запуске Github Pages вы можете увидеть, но он не будет active. Для того чтобы он заработал, нам нужно его зарегистрировать.
252
+
Для этого перейдем в `main.tsx` и зарегистрируем Service Worker.
253
+
254
+
Подключим registerSW:
255
+
```ts
256
+
import {registerSW} from"virtual:pwa-register";
257
+
```
258
+
И после кода, где мы подключили наше приложение, пропишем:
259
+
```ts
260
+
if ("serviceWorker"innavigator) {
261
+
registerSW()
262
+
}
263
+
```
264
+
На данном этапе настройка Service Worker закончена, и при запуске build на Github Pages можно будет увидеть и Mainfest.json и Service Worker. Убедительно проверьте, что в Manifest нет ошибок, которые могли бы повлиять на установку PWA. Эти ошибки отмечены во вкладке Manifest в отдельной группе. Если ошибок нет, то после скачивание PWA вы должны иметь возможность перейти в авиарежим и при этом приложение все еще будет работать, даже если его закрыть и открыть снова.
265
+
266
+
Важно! Если при импортировании registerSW появляется ошибка об отсутствии модуля, необходимо перейти в `tsconfig.app.json ` и в `CompilerOptions` добавить:
267
+
```json
268
+
{
269
+
"compilerOptions": {
270
+
"types": [
271
+
"vite-plugin-pwa/info.d.ts",
272
+
"vite-plugin-pwa/client.d.ts"
273
+
],
274
+
```
275
+
276
+
Однако, как вы могли заметить, при запуске где-либо кроме Github Pages, Service Worker либо вообще не запускается, либо выдает ошибку `The script has an unsupported MIME type ('text/html').`
277
+
В дополнение к этому, на вашем телефоне (если у вас Android) не будет возможности скачать PWA по ip адрессу.
278
+
279
+
Обе эти ошибки связаны с тем, что для работы PWA сайт должен работать по протоколу https, а не http. Как настроить сайт для работы с https рассмотрим ниже.
280
+
## 3. Настройка https на React
281
+
282
+
Для того, чтобы сайт работал по протоколу https он должен иметь сертификат. Данные сертификаты подтверждаются несколько одобренных компаний за небольшую сумму, но для нас будет достаточно автоматически сгенерированного локально подтвержденного сертификата.
283
+
284
+
Для работы с сертификатами, во-первых, установим модуль mkcert
285
+
```shell
286
+
npm install mkcert
287
+
```
288
+
После этого нам нужно создать Authority которая будет подтверждать наш сертификат. Сертификаты, подтвержденные данным образом, реально работают только при работе на localhost.
289
+
290
+
После создания Authority необходимо создать сам сертификат. Для этого использует команды:
291
+
```shell
292
+
mkcert create-ca
293
+
mkcert create-cert
294
+
```
295
+
296
+
После выполнения данных команд у вас появится 4 новых файла: ca.crt, ca.key, cert.crt, cert.key.
297
+
298
+
299
+
`ca.crt` и `cert.crt` - это публичные ключи Authority и сертификата соответственно, а ca.key и cert.key - приватные ключи.
300
+
301
+
##### Никогда не выкладывайте частные ключи в общий доступ, даже на GitHub!
302
+
303
+
После создания данных ключей остался один шаг - настроить `vite.config.ts`, перед началом установив `vite-plugin-mkcert` и `@types/node`:
После добавления данного кода, вы можете открыть ваш сервер по вашему основному ip(не localhost и не vpn) и увидеть, что Service Worker подключён.
317
+
318
+
319
+
## 4. Добавление адаптивности
195
320
Зачем это нужно? Адаптивность помогает вашему веб-приложению нормально выглядить на устройствах с разными размерами экрана, а также влияет на продвижение сайта в поисковых системах. Сделать это можно c помощью использования относительно новых моделей макета (flexbox, grid), а так же через media queries в css. [Здесь](https://ru.hexlet.io/courses/css-adaptive/lessons/media-queries/theory_unit) можно почитать про последние.
0 commit comments