모든 Meteor 응용 프로그램을 PWA로 변환
17535 단어 meteorpwajavascript
Meteor는 모든 PWA 기능(yet!)을 제공하지 않지만 다음과 같은 몇 단계만 수행하면 됩니다.
$ meteor create pwa-boilerplate
$ cd pwa-boilerplate && meteor npm install
$ meteor
lighthouse을 사용하여 새 응용 프로그램을 테스트할 때 다음과 같은 결과를 얻을 수 있습니다.다행히도, 다음 두 단계 이후, 이 문제들 중 대다수는 이미 해결되었다🎉
1단계 - 서비스 추가
service worker은 pwa를 가능하게 하는 핵심 기능이다.링크된 글을 읽으면, Meteor에 대해 한동안 알고 있으면, HTTP 기반의 서비스 종사자가 Meteor의 웹소켓protcoll DDP와 어떻게 호환되는지 먼저 생각할 수 있습니다.
다행히도 repository with a Meteor-specific service worker 솔루션을 사용할 수 있습니다.그러나 프로젝트의 공용 폴더에
sw.js
파일을 수동으로 통합해야 합니다.$ mkdir -p public
$ curl "https://raw.githubusercontent.com/NitroBAY/meteor-service-worker/master/sw.js" >> ./public/sw.js
$ # or: wget "https://raw.githubusercontent.com/NitroBAY/meteor-service-worker/master/sw.js" -O ./public/sw.js
그리고 시작 코드에 서비스 종사자를 통합해야 합니다. 그렇지 않으면 불러오지 않습니다.시작 파일을 만듭니다.$ mkdir -p imports/startup/client
$ touch imports/startup/client/serviceWorker.js
콘솔 메시지를 통해 서비스 워커가 설치되었거나 오류가 발생했을 때 실패했는지 확인하는 시작 기능을 추가합니다.// serviceWorker.js
import { Meteor } from 'meteor/meteor'
Meteor.startup(() => {
navigator.serviceWorker
.register('/sw.js')
.then(() => console.info('service worker registered'))
.catch(error => {
console.log('ServiceWorker registration failed: ', error)
})
})
마지막으로 serviceWorker.js
파일에서 client/main.js
파일을 가져오는 것을 잊지 마십시오.// client/main.js
import '../imports/startup/client/serviceWorker.js'
이때 서비스 직원은 이미 통합되었지만 여전히 정상적인 업무에 필요한 중요한 정보가 부족하다.이 파일은 manifest.json
파일로 제공되며, 다음 단계에서 이 파일을 통합할 것입니다.이후, 당신의 응용 프로그램은 기본적인 pwa 지원을 받을 것입니다.단계 2 - 목록 파일 제공
package.json
파일과 유사하며 manifest file은 pwa의 속성을 설명합니다.응용 프로그램은 파일을 public
폴더에 놓고 html 헤더에 적당한 link
태그를 포함하여 브라우저에 이 목록을 불러오도록 알릴 수 있습니다.단점이 하나 있습니다. - pwa를 설치하려면 최소한 192x192px 아이콘을 제공해야 합니다.사용 가능한 아이콘이 없으면 다음 아이콘을 사용할 수 있습니다.
2.1. 목록 파일 만들기
$ echo "{}" >> public/manifest.json
2.2. 필요한 최소 컨텐츠 추가
{
"short_name": "mypwa",
"name": "My Cool PWA",
"start_url": "/",
"display": "standalone",
"icons": [
{
"src": "/images/icons-192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "/images/icons-512.png",
"type": "image/png",
"sizes": "512x512"
}
]
}
2.3. 이미지 추가
$ mkdir -p public/images
$ cp /path/to/icons-192.png public/images/icons-192.png
$ cp /path/to/icons-512.png public/images/icons-512.png
2.4. 헤드에 연결된 파일
<head>
<title>pwa-boilerplate</title>
<link rel="manifest" href="/manifest.json">
</head>
이제 새로운 라이트하우스 감사를 사용하여 pwa 호환성을 검사합시다.보시다시피 우리는 현재 응용 프로그램을 pwa로 설치하는 데 필요한 모든 것을 지원합니다.설치 단추가 보이지 않고, 설치할 수 있다는 것을 회계 감사가 명확하게 표시한다면, 다른 포트를 선택할 수 있습니다.응용 프로그램이
url:port
조합에 설치되면 브라우저는 이 응용 프로그램이 이미 설치되었다고 생각합니다.이제 응용 프로그램 pwa를 최적화하기 위해 마지막 조정을 추가합시다.
3단계 - 데스크톱/모바일 사용 최적화
먼저 부족한 속성을 manifest.json
파일에 추가합니다.manifest guide을 읽고 속성이 무엇을 설정할 수 있는지 알아보세요.
그런 다음 뷰포트, 아이콘 등을 최적화하기 위해 noscript
폴백 및 중요한 head
항목을 추가해야 합니다.
마지막으로, 데이터가 https로 다시 연결되도록 확보해야 합니다.이것은 zero-ConfigMeteor 패키지 force-ssl
을 추가하여 실현할 수 있습니다.
3.1. 목록 파일 완성
비록 pwa는 이러한 기능이 없어도 정상적으로 작동할 수 있지만, 일부 주제를 추가하여 더욱 삽입적인 체험을 제공하는 것이 유익할 수 있다.또한 scope
을 정의할 수 있습니다. 이것은 당신의 pwa가 제한될 (자) 노선입니다.예를 들어 구글은 지도 응용 프로그램의 pwa를 /maps
으로 제한했다.
{
"short_name": "mypwa",
"name": "My Cool PWA",
"start_url": "/",
"display": "standalone",
"icons": [
{
"src": "/images/icons-192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "/images/icons-512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"background_color": "#000000",
"scope": "/",
"theme_color": "#FFFFFF"
}
3.2. 헤드 태그 최적화
다음 머리 속성은 목록 파일의 항목과 중복될 수 있으므로 업데이트를 확인하십시오.
<head>
<meta charset="utf-8">
<meta name="application-name" content="my cool pwa">
<meta name="viewport" content="initial-scale=1, maximum-scale=5, minimum-scale=-5"/>
<meta name="theme-color" content="#FF00AA">
<link rel="manifest" href="/manifest.json">
<link rel="shortcut icon" type="image/png" href="/images/icons-192?v1" sizes="192x192">
<link rel="apple-touch-icon" sizes="192x192" href="/images/icons-192.png">
<link rel="fluid-icon" href="/images/icons-192.png?v1" title="app icon">
<title>pwa-boilerplate</title>
<noscript>
<style>
body:before { content: "Sorry, your browser does not support JavaScript!"; }
</style>
</noscript>
</head>
하나의 특례는 noscript tag이다.페이지가 불러올 때 완전히 덮어씌워질 수 있도록 그것을 머리에 두어야 한다.본문에 놓으면 렌더링 엔진에 따라 초기 본문 내용이 동적으로 불러올 수 있기 때문에 Javascript를 사용하지 않을 때 감지할 수 없습니다.
그 밖에 html 표준은 link
style
또는 meta
원소 but not flow content을 방치할 수 없습니다.이러한 해결 방법에 대해 우리는 css:before
선택기와 content
속성을 사용하여 텍스트를 기본 본문에 나타낼 수 있습니다.
3.3. 강제 SSL
이것은 마지막이자 가장 간단한 부분이다.force-ssl
포만 추가하면 등대 감사를 만족시킬 수 있습니다🎉 🎉 🎉
$ meteor add force-ssl
마지막으로 응용 프로그램에서 완전한 pwa 최적화 지원을 통합할 수 있어야 합니다.
만약 과정 중에 어떤 문제가 발생하거나 개선할 공간이 있다면 언제든지 의견을 발표하십시오.만약 유성 주제에 관한 더 많은 글을 보고 싶으면 저에게 알려주세요.
Reference
이 문제에 관하여(모든 Meteor 응용 프로그램을 PWA로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/jankapunkt/transform-any-meteor-app-into-a-pwa-4k44
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"short_name": "mypwa",
"name": "My Cool PWA",
"start_url": "/",
"display": "standalone",
"icons": [
{
"src": "/images/icons-192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "/images/icons-512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"background_color": "#000000",
"scope": "/",
"theme_color": "#FFFFFF"
}
<head>
<meta charset="utf-8">
<meta name="application-name" content="my cool pwa">
<meta name="viewport" content="initial-scale=1, maximum-scale=5, minimum-scale=-5"/>
<meta name="theme-color" content="#FF00AA">
<link rel="manifest" href="/manifest.json">
<link rel="shortcut icon" type="image/png" href="/images/icons-192?v1" sizes="192x192">
<link rel="apple-touch-icon" sizes="192x192" href="/images/icons-192.png">
<link rel="fluid-icon" href="/images/icons-192.png?v1" title="app icon">
<title>pwa-boilerplate</title>
<noscript>
<style>
body:before { content: "Sorry, your browser does not support JavaScript!"; }
</style>
</noscript>
</head>
$ meteor add force-ssl
Reference
이 문제에 관하여(모든 Meteor 응용 프로그램을 PWA로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jankapunkt/transform-any-meteor-app-into-a-pwa-4k44텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)