vue/cli-plugin-pwa

丌官招
2023-12-01

@vue/cli-plugin-pwa


vue-cli 的 pwa 插件

该插件加入的 service worker 只会在生产环境下 (即只在运行 npm run build 或 yarn build 时) 开启。在开发环境下开启 service worker 并不推荐,因为它会导致之前的缓存资源被使用而未包含最新的本地改变。

取而代之的是,在开发环境下引入 noopServiceWorker.js。这个 service worker 文件会重置之前在相同主机和端口注册过的任何 service worker,有效地达到了 no-op 的目的。

如果你需要本地测试一个 service worker,构建应用并在构建目录运行一个简单的 HTTP 服务器。这里推荐使用浏览器隐私模式以避免浏览器缓存带来的问题。

配置
	配置是通过 vue.config.js 的 pwa 属性或 package.json 中的 "pwa" 字段处理的。

pwa.workboxPluginMode
	这个选项允许你在底层的 workbox-webpack-plugin 所支持的两种模式之间进行选择。

'GenerateSW' (默认值),每次重新构建你的 web app 时都会创建一个新的 service worker 文件。

'InjectManifest' 允许你以一个现成的 service worker 文件开始,然后创建一份文件拷贝,并把“precache manifest”注入其中。

pwa.workboxOptions
	这些选项会传入底层的 workbox-webpack-plugin。

pwa.name
	默认值:package.json 的 "name" 字段

在生成的 HTML 中用作 apple-mobile-web-app-title meta 标签的值。注意你需要编辑 public/manifest.json 来配合它。

pwa.themeColor
	默认值:'#4DBA87'

pwa.msTileColor
	默认值:'#000000'

pwa.appleMobileWebAppCapable
	默认值:'no'
	这里的默认值是 'no' 因为 iOS 11.3 之前都不支持 PWA。

pwa.appleMobileWebAppStatusBarStyle
	默认值:'default'

pwa.assetsVersion
	默认值:''

该选项会为图标和 manifest 文件的 URL 添加 ?v=<pwa.assetsVersion>。以便在需要的时候应对浏览器缓存。

pwa.manifestPath
	默认值:'manifest.json'
	应用的 manifest 文件路径。

pwa.iconPaths
	默认值:
		{
		  favicon32: 'img/icons/favicon-32x32.png',
		  favicon16: 'img/icons/favicon-16x16.png',
		  appleTouchIcon: 'img/icons/apple-touch-icon-152x152.png',
		  maskIcon: 'img/icons/safari-pinned-tab.svg',
		  msTileImage: 'img/icons/msapplication-icon-144x144.png'
		}
		改变这些值可以为图标设置不同的路径。

配置示例
// Inside vue.config.js
module.exports = {
  // ...其它 vue-cli 插件选项...
  pwa: {
    name: 'My App',
    themeColor: '#4DBA87',
    msTileColor: '#000000',
    appleMobileWebAppCapable: 'yes',
    appleMobileWebAppStatusBarStyle: 'black',

    // 配置 workbox 插件
    workboxPluginMode: 'InjectManifest',
    workboxOptions: {
      // InjectManifest 模式下 swSrc 是必填的。
      swSrc: 'dev/sw.js',
      // ...其它 Workbox 选项...
    }
  }
}
在已创建的项目中安装
vue add @vue/pwa

注入的 webpack-chain 规则
config.plugin('workbox')


 类似资料: