

GitHub - IBM/pwa-lit-template: A template for building Progressive Web Applicati...
source link: https://github.com/IBM/pwa-lit-template
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Status: Experimental
This project is currently in development.
pwa-lit-template
Getting started | Build for production | Create a new page | Environment configuration | Service worker | Browser support
This project helps you to build Progressive Web Applications following the modern web standards, best practices and providing you with tools for that purpose. Out of the box, provides you with the following features:
- Simple way to create Web Components with Lit.
- Small and powerful client-side router for Web Components with Vaadin Router.
- All the benefits from a PWA (manifest, service worker, offline UI) thanks to Workbox and pwa-helpers.
- SEO friendly thanks to the
PageElement
custom element and thehtml-meta-manager
. - A development server with auto-reload to serve the application without bundling with
@web/dev-server
. - Simple build flow thanks to Rollup and
@open-wc/building-rollup
initial configuration. - Easy deployment over to prpl-server or any static hosting.
Check out our roadmap to get informed of the latest features released and the upcoming ones.
Getting started
Prerequisites
Furthermore, this project is built on TypeScript with the intention of improving the developer experience.
Install the dependencies
npm install
Start the development server
This command serves the app at http://localhost:8000
:
npm start
Project structure
├─ images/
├─ patches/
├─ server/
├─ src/
│ ├─ components/
│ │ ├─ app-index.ts
│ │ └─ ···
│ ├─ helpers/
│ │ ├─ page-element.ts
│ │ └─ ···
│ ├─ pages/
│ │ ├─ page-home.ts
│ │ └─ ···
│ ├─ router/
│ │ └─ routes.ts
│ └─ config.ts
├─ index.html
├─ manifest.webmanifest
├─ package.json
├─ robots.txt
├─ rollup.config.js
└─ tsconfig.json
images
: is use to store the static resourced used by your application.patches
: contains the patches to apply in the different packages mentioned here. It will be removed at some point.server
: contains the logic to serve the application. And is where you are going to create yourdist/
folder containing the bundle of your application.src
components
: contains your custom Web Components. Inside this folder you will find theapp-index.ts
file, main root of your application following the PRPL patern.helpers
: contains two interesting features:PageElement
andhtml-meta-manager
. Go more in-depth with them here.pages
: where you create the pages for your application.router
: where you create the routes for your application.config.ts
: stores the application configuration variables. Go more in-depth with it here.
index.html
: the application entry point.
Guides
Build for production
This command use Rollup to build an optimized version of the application for production:
npm run build
It has two outputs: in addition to outputting a regular build, it outputs a legacy build which is compatible with older browsers down to IE11.
At runtime it is determined which version should be loaded, so that legacy browsers don't force to ship more and slower code to most users on modern browsers.
Note: If you need to add static files to the build, like the images
folder or the manifest.webmanifest
, you should register them in the copy()
plugin of the rollup.config.js
.
Create a new page
-
Create the new page component (extending from
PageElement
helper) in thepages
folder. For example apage-explore.ts
.import { html } from 'lit'; import { customElement } from 'lit/decorators.js'; import { PageElement } from '../helpers/page-element.js'; @customElement('page-explore') export class PageExplore extends PageElement { render() { return html` <h1>Explore</h1> <p>My new explore page!</p> `; } meta() { return { title: 'Explore', description: 'Explore page description', }; } }
-
Register the new route in the
routes.ts
:{ path: '/explore', name: 'explore', component: 'page-explore', action: async () => { await import('../pages/page-explore.js'); } },
With SEO in mind, this project offers you the PageElement
base class to help you to deal with it; it has a meta()
method that edits the HTML meta tags of the specific page. You must override that method to provide the data.
Environment configuration
This project allows different configurations per environment. The file that manages that configuration is src/config.ts
. If you are interested in overwrite any of the configuration variables depending of the environment, you can create a file following the rule src/config.{NODE_ENV}.ts
. Take into account that you don't need to replicate all the variables, just change the variable that you need to be different this way:
import config from './config.js';
export default {
...config,
environment: 'staging',
};
In the build process the references in the project (but not in the configuration files) of ./config
will be replaced to ./config.{NODE_ENV}
loading the expected configuration file for the target environment.
Lastly, the way to use that configuration is quite simple. You only need to import it:
import config from '../config.js';
And use it where you need it:
render() {
return html`
<footer>
<span>Environment: ${config.environment}</span>
</footer>
`;
}
Service worker
This project has configured the generation and injection of a service worker in the build process. But it is disabled by default. To enable it you just need to change the variable GENERATE_SERVICE_WORKER
in the rollup.config.js
to true
.
Also you can change the Workbox configuration too modifying the variable workboxConfig
in that same file.
Browser support
- Chrome
- Firefox
- Safari
To run on other browsers, you need to use a combination of polyfills and transpilation. This step is automated by the build for production command.
Recommend
-
178
Files Permalink Latest commit message Commit...
-
43
PWA ,即 Progressive Web App , 是提升 Web App 的体验的一种新方法,能给用户原生应用的体验。 一个 PWA 应用首先是一个网页, 可以通过 Web 技...
-
12
Progressive Web App (PWA) Links Progressive Web App (PWA) Links May 23, 2017 Web Development JavaScript Links...
-
16
Progressive web apps directory for PWA apps and articles A pixel Art & Animation Creation Tool Built using HTML5 Canvas. ...
-
6
Progressive Web App (PWA) & Fintech The combination of native app and traditional web app elements in single software – Progressive Web Application (PWA) – has made it a favorite among entrepreneurs i...
-
5
SubscribeSubscribe to Tharun ShivStay up to date! Get all the latest & greatest posts delivered straight to your inbox9 Janu...
-
11
April 14, 2022 30 days of PWA: Fall in love with Progressive Web Apps If you recently started your journey learning web development and...
-
4
Issues · IBM/pwa-lit-template · GitHub
-
13
PWA 13 Best Progressive Web App (PWA) Examples in 2022 Micha...
-
5
Progressive web apps 渐进式 Web 应用程序 (PWA) 渐进式 Web 应用程序(PWA) 是使用
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK