정적 사이트를 PWA로!
Fun Fact: DEV Community is also a PWA!
기본 PWA를 구축하는 것은 그리 어렵지 않습니다. 약간의 변경으로 정적 사이트를 PWA로 변환하는 방법을 살펴보겠습니다.
But First things 먼저 좀 더 이해해
PWA에 필요한 추가 구성 요소:
PWA 구축에서 그들의 역할을 살펴보겠습니다.
여기서 저는 멋진 트리오(HTML, CSS, JS)로 만든 간단한 시계로 시작합니다.
먼저 앱을 사용해 보세요!!
Click here 인스톨 할 수 있도록!
!!! 메모:
현재 모든 브라우저가 PWA를 지원하는 것은 아니지만 곧 지원될 예정입니다. 최신 버전의 Chrome, FireFox, Edge가 최근 지원합니다.
프로젝트 구조:
/Clock
+-- /components
| +-- /images
| | +-- favicon.png
| | +-- clock-face.png
| +-- /scripts
| | +-- main.js
| | +-- pwa-handler.js
| +-- /styles
| +-- main.css
+-- index.html
+-- manifest.json
+-- service-worker.js
A-not-so-Fun Fact: Adobe has discontinued their PhoneGap Build; which is a cloud service for building apps because of the rise of PWA.
index.html -> 매니페스트를 연결하는 것을 잊지 마세요!
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Some basic meta tags. -->
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, height=device-height,user-scalable=no, initial-scale=1.0" />
<!-- This one is important for the manifest. -->
<meta name="theme-color" content="#0d085c" />
<title>Clock</title>
<!-- Reference the StyleSheet. -->
<link rel="stylesheet" href="/components/main.css" />
<!-- Reference the manifest file; is must for PWA. -->
<link rel="manifest" href="/manifest.json" />
<!-- Reference the icons -->
<link rel="shorcut icon" href="/components/favicon.png" type="image/x-icon" />
<link rel="apple-touch-icon" href="/components/favicon.png" />
</head>
<body>
<div id="header">
<div id="title">Clock</div>
<div id="install">Install App</div>
</div>
<div id="clocks">
<div id="analog">
<div id="second"></div>
<div id="minute"></div>
<div id="hour"></div>
</div>
<div id="digital"></div>
</div>
<!-- Reference the main and helper scripts. -->
<script src="/components/main.js"></script>
<script src="/components/pwa-handler.js"></script>
</body>
</html>
main.css 및 main.js 파일은 PWA와 관련이 없으므로 표시하지 않았지만 GitHub 저장소에서 찾을 수 있습니다.
/components/scripts/pwa-handler.js
// Reference the serviceWorker.
const serviceWorker = navigator.serviceWorker;
// Register our ServiceWorker script, if serviceWorker is available.
if (serviceWorker) {
serviceWorker
.register("/service-worker.js")
.then(() => console.log("ServiceWorker Registered to the Application!"))
.catch(() => console.log("Failed to Register the ServiceWorker."));
}
// Create a variable to defer the beforeinstallprompt event.
let beforeInstallEvent;
// Reference the install button from DOM.
const installButton = document.getElementById("install");
// Watch for the beforeinstallevent and defer it.
window.addEventListener("beforeinstallprompt", (event) => {
event.preventDefault();
beforeInstallEvent = event;
installButton.style.display = "block";
});
// Prompt for Installation when install button is clicked.
installButton.addEventListener("click", () => {
beforeInstallEvent
.prompt()
.then((choice) => {
// Hide the install button as its purpose is over.
if (choice.outcome == "accepted") {
installButton.style.display = "none";
}
});
});
index.html
에 설치를 유도하는 버튼을 제공했는데 앱을 설치하면 바로 사라집니다.
/components/images/favicon.png
/components/images/clock-face.png
manifest.json -> 512x512 아이콘은 필수입니다!
{
"name": "Clock",
"start_url": "/",
"display": "standalone",
"theme_color": "#0d085c",
"icons": [
{
"src": "/components/images/favicon.png",
"type": "image/png",
"sizes": "512x512",
"purpose": "any maskable"
}
]
}
이것은 최소한의 매니페스트 파일입니다. 검색하면 사용할 수 있는 다른 많은 속성을 찾을 수 있습니다.
서비스-worker.js
// Name of the Cache.
const CACHE = "cacheV1";
// Select files for caching.
let urlsToCache = [
"/",
"/index.html",
"/components",
"/components/images",
"/components/images/favicon.png",
"/components/images/clock-face.png",
"/components/scripts",
"/components/scripts/main.js",
"/components/scripts/pwa-handler.js",
"/components/styles",
"/components/styles/main.css"
];
// Cache all the selected items once application is installed.
self.addEventListener("install", (event) => {
event.waitUntil(
caches.open(CACHE).then((cache) => {
console.log("Caching started.");
return cache.addAll(urlsToCache);
})
);
});
// Whenever a resource is requested, return if its cached else fetch the resourcefrom server.
self.addEventListener("fetch", (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
if (response) {
return response;
}
return fetch(event.request);
})
);
});
이 정도의 지식이 있으면 PWA의 세계로 뛰어들 준비가 된 것입니다.
다음은 GitHub 저장소입니다.
<사업부 클래스="readme-개요">
프로리시 / 시계
PWA를 설치할 수 있는 아날로그 및 디지털 시계가 특징입니다.
시간 내주셔서 감사합니다. 토론 영역에서 PWA를 참조하십시오.
btw this is my first post ever on Internet!
Reference
이 문제에 관하여(정적 사이트를 PWA로!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/prorishi/your-static-site-to-a-pwa-24dl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)