Skip to content
Permalink
master
Switch branches/tags
Go to file
2 contributors

Users who have contributed to this file

@Jinjiang @fuchao2012
executable file 118 lines (74 sloc) 3.93 KB

@vue/cli-plugin-pwa

英文原版

vue-cli 的 pwa 插件

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

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

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

配置

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

  • pwa.workboxPluginMode

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

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

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

    这份“该使用哪个插件?”的指南会帮助你在两者之间做出选择。

  • pwa.workboxOptions

    这些选项会传入底层的 workbox-webpack-plugin

    关于所支持的值的更多的信息,请查阅 GenerateSWInjectManifest 的指南。

  • 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')