Vue.js로 PWA 앱 만들기
1. PWA란?
PWA(Progressive Web Apps)는 Google Chrome 엔지니어 Alex Russell씨가 2015년에 고안한 개념으로 알려져 있습니다. 특징으로서 네이티브 앱과 같은 유저 체험을 WEB로 제공하는 것이 목적입니다.
PWA의 특징
FAST : 성능이 좋고 가벼운 동작
Integrated : OS와 통합된 사용자 경험
Engaging : 앱과 같은 경험 제공
Reliable : 오프라인에서도 작동하는 편리성
PWA를 실현하는 API
PWA를 실현하기 위해 중심이 되는 기능을 제공하는 것이 「Service Worker」입니다.
Service Worker
Service Worker는 "백그라운드에서 실행되는 프로그래밍 가능한 네트워크 프록시"입니다. Service Worker를 이용하면 웹 페이지의 오프라인 대응을 비롯해 캐시, 백그라운드 동기화, Push 알림 기능을 제공합니다. 다만 조건으로서 localhost 접속 이외는 HTTPS의 사용이 필수가 되고 있습니다.
캐시
Service Worker는 웹 페이지에서 요청 리소스가 캐시에 있으면 캐시된 리소스를 반환합니다. 그 때 통신하지 않기 때문에 고속으로 동작하고 통신 비용이 발생하지 않습니다.
백그라운드 동기화
오프라인 상태에서 사용자가 수행한 동작을 캐시하고 온라인에서 콘텐츠를 동기화할 수 있습니다. 예를 들어 채팅 서비스를 사용하고 있어 전파가 나빠지는 경우가 있습니다만, 오프라인에서도 메시지를 송신해 두면 전파 환경이 좋아져 온라인이 된 타이밍으로 동기할 수 있습니다.
푸시 알림
Service Worker는 웹 앱에서도 푸시 알림을 보낼 수 있습니다. 웹 페이지가 활성 상태가 아니더라도 서버에서 푸시를 받고 사용자에게 알림을 보낼 수 있습니다.
2. PWA와 Vue.js의 환경 구축
vue-pwa-boilerplate
vue-pwa-boilerplate 를 사용해 환경 구축해 갑니다.
vue-pwa-boilerplate는 Vue.js에서 PWA로 개발하기위한 편지지이며 필요한 환경을 갖추고 있습니다.
vue-pwa-boileraplate을 사용하려면 "vue-cli"가 필요하므로 설치합시다.
$ npm install -g vue-cli
$ vue init pwa my-project
$ cd my-project
$ npm install
$ npm run dev
실행하면 브라우저가 자동으로 시작되고 http://localhost:8080/
를 호출합니다. 처음은 이런 화면입니다.
PWA화하기 위해서는 빌드가 필요합니다. npm으로 빌드합니다.
npm run build
빌드하면 dist/
디렉토리가 생성됩니다.
이제 Service Worker가 등록된 상태로 빌드됩니다.
Service Worker의 동작을 확인하기 위해 Web Server for Chrome을 도입합니다.dist
디렉터리에 빌드된 여러 파일이 나오므로 경로를 지정하여 엽니다.
Workbox 플러그인
Workbox 은 PWA화에 필요한 Service Worker를 좋은 느낌으로 해주는 플러그인입니다. 페이지 및 파일과 같은 캐시의 생존 기간을 지정할 수 있습니다.
Workbox를 설치합니다.
npm install workbox-webpack-plugin --save-dev
webpack의 플러그인이므로 설정 파일을 변경합니다.
webpack.prod.conf.js// const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin')
const workboxPlugin = require('workbox-webpack-plugin') // 追加
// 省略
// 削除
// new SWPrecacheWebpackPlugin({
// cacheId: 'my-pwa',
// filename: 'service-worker.js',
// staticFileGlobs: ['dist/**/*.{js,html,css}'],
// minify: true,
// stripPrefix: 'dist/'
// })
// 追加
new WorkboxPlugin.GenerateSW({
cacheId: 'easy-wallet',
globDirectory: config.build.assetsRoot,
globPatterns: ['**/*.{html,js,css,png}'],
swDest: path.join(config.build.assetsRoot, 'service-worker.js'),
skipWaiting: true,
clientsClaim: true,
runtimeCaching: []
})
파라미터의 개요는 이하와 같다.
· skipWaiting
Service Worker가 기다리는 lifecycle stage를 건너 뛰는지 여부
· clientsClaim
ServiceWorker가 활성 상태가 되었을 때 즉시 클라이언트 제어를 시작하려면 true
· runtimeCaching
캐시 전략, 대상 파일의 캐시 설정하려면 추가
다시 npm run build
빌드합니다. Service Worker의 캐시가 남아 있으므로 한 번 지우고 다시 읽습니다.
이상입니다.
Reference
이 문제에 관하여(Vue.js로 PWA 앱 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chohas/items/c6ab829bc6b692ff23d5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ npm install -g vue-cli
$ vue init pwa my-project
$ cd my-project
$ npm install
$ npm run dev
npm run build
npm install workbox-webpack-plugin --save-dev
// const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin')
const workboxPlugin = require('workbox-webpack-plugin') // 追加
// 省略
// 削除
// new SWPrecacheWebpackPlugin({
// cacheId: 'my-pwa',
// filename: 'service-worker.js',
// staticFileGlobs: ['dist/**/*.{js,html,css}'],
// minify: true,
// stripPrefix: 'dist/'
// })
// 追加
new WorkboxPlugin.GenerateSW({
cacheId: 'easy-wallet',
globDirectory: config.build.assetsRoot,
globPatterns: ['**/*.{html,js,css,png}'],
swDest: path.join(config.build.assetsRoot, 'service-worker.js'),
skipWaiting: true,
clientsClaim: true,
runtimeCaching: []
})
Reference
이 문제에 관하여(Vue.js로 PWA 앱 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chohas/items/c6ab829bc6b692ff23d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)