LoginSignup
11
5

More than 3 years have passed since last update.

オープンソース版LWCのPWAをGithub Pages(サブディレクトリ)で動かす

Posted at

Lightning Web Components(LWC)というSalesforceのフロントエンドフレームワークがあります。これはSalesforceプラットフォーム上でしか動かないのですが、そのオープンソース版があります。

こちらを試してみたところ、PWA(Progressive Web Apps)で動かすオプションがあったので、動かしてみました。とりあえずGithub Pagesで動かそうとしたら、サブディレクトリで動かすのに少し悩んだので、主にそこのところを書いていきます。

LWC関係なく、サブディレクトリでPWAを動かしたい人が検索したときに役に立ったらいいなと思います。

※Salesforceはあんまり関係ないので今回はSalesforceのブログキャンペーンではありません。

できたもの

MacのChromeで開くとこのようにインストールボタンが表示されます。

image.png

インストールするとデスクトップアプリのように起動します。
(なお、アンインストールしたいときはこの右上のメニューからアンインストールできます。)

image.png

Spotlightから検索もできるし、Dockに追加もできます。

image.png

もはやデスクトップアプリはこれでよさそうですね。Electron要らなそう。
もちろんモバイルでもアプリのように動きますが、今回私が作りたいのはデスクトップアプリだったので、特にモバイルは試していません。

リポジトリ

リポジトリはこちらです。

Github Pagesはmasterのdocsフォルダで動かすように設定しているので、docsフォルダの中身がホスティングされています。

サブディレクトリで動かす

https://lwc-oss-pwa-example.example.com/

のようにルートで動かすなら、npx create-lwc-app my-appでできたサイトそのままで動きますが、

今回Github Pagesのプロジェクトサイトで動かそうとしたので、URLが

http://<username>.github.io/<repository>/

のようになります。

manifest.jsonの修正

一番重要なところですが、manifest.jsonを以下のように変更します。

今回はhttps://atskimura.github.io/lwc-oss-pwa-example/で動かすので、Scopeをサブディレクトリのlwc-oss-pwa-exampleにしています。
start_urlはScopeからの相対パスでPWAを起動したときに読み込んで欲しいURLを記載します。

manifest.json
     "Scope": "/lwc-oss-pwa-example/",
     "start_url": "./index.html",

manifest.jsonの仕様はウェブアプリマニフェスト | MDNを参照してください。

修正箇所: https://github.com/atskimura/lwc-oss-pwa-example/compare/664bb2c...67b62d0#diff-898656577829f3ff69c0ab8c788664e1

scripts/webpack.config.jsの修正

ビルドしたjs,cssの読み込み処理をindex.htmlにwebpackが追加してくれるので、それも相対パスになるように、以下のようにoutputを追加します。

webpack.config.js
module.exports = {
    output: {
        publicPath: './',
    },
    plugins: [new GenerateSW({ swDest: 'sw.js' })]
};

修正箇所: https://github.com/atskimura/lwc-oss-pwa-example/compare/664bb2c...67b62d0#diff-4a5ee2343b9d772e602c958b1feb98a4

Service Workerの登録も相対パスに

create-lwc-app でPWAを作ると、Workbox webpack Pluginsでservice workerファイル(sw.js)を自動生成します(これでjsやcssをオフラインキャッシュできるようにしています)。これの読み込みも相対パスにします。

修正箇所: https://github.com/atskimura/lwc-oss-pwa-example/compare/664bb2c...67b62d0#diff-1fdf421c05c1140f6d71444ea2b27638

リソースを読み込む箇所を相対パスに

画像などを読み込みところを全部相対パスにします。

修正箇所:

終わりに

GithubのCompareを見るだけでわかると思うのですが、何も書かないのも寂しかったので、ちょっと解説を入れてみました。
https://github.com/atskimura/lwc-oss-pwa-example/compare/664bb2c...67b62d0

肝はmanifest.jsonの修正だけです。LWC関係なく、サブディレクトリでPWAを動かしたい人もここの書き方は役に立つかなと思います。

11
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5