From db4c23babe01f1257e0c0b9adbcaa9871f564d4a Mon Sep 17 00:00:00 2001 From: aweikalee Date: Sun, 18 Nov 2018 16:58:07 +0800 Subject: [PATCH] manifest.json will be generated by cli-plugin-pwa --- packages/@vue/cli-plugin-pwa/README.md | 15 ++++++- .../generator/template/public/manifest.json | 20 --------- .../@vue/cli-plugin-pwa/lib/HtmlPwaPlugin.js | 45 ++++++++++++++++++- 3 files changed, 58 insertions(+), 22 deletions(-) delete mode 100644 packages/@vue/cli-plugin-pwa/generator/template/public/manifest.json diff --git a/packages/@vue/cli-plugin-pwa/README.md b/packages/@vue/cli-plugin-pwa/README.md index 8a65cfba79..af28355c43 100644 --- a/packages/@vue/cli-plugin-pwa/README.md +++ b/packages/@vue/cli-plugin-pwa/README.md @@ -54,7 +54,7 @@ file, or the `"vue"` field in `package.json`. - Default: `'default'` - **pwa.assetsVersion** - + - Default: `''` This option is used if you need to add a version to your icons and manifest, against browser’s cache. This will append `?v=` to the URLs of the icons and manifest. @@ -65,6 +65,19 @@ file, or the `"vue"` field in `package.json`. The path of app’s manifest. +- **pwa.manifestOptions** + + - Default: `{}` + + The object will be used to generate the `manifest.json` + + If the following attributes are not defined in the object, the options of `pwa` or default options will be used instead. + - name: `pwa.name` + - short_name: `pwa.name` + - start_url: `'.'` + - display: `'standalone'` + - theme_color: `pwa.themeColor` + - **pwa.iconPaths** - Defaults: diff --git a/packages/@vue/cli-plugin-pwa/generator/template/public/manifest.json b/packages/@vue/cli-plugin-pwa/generator/template/public/manifest.json deleted file mode 100644 index e1f44608f9..0000000000 --- a/packages/@vue/cli-plugin-pwa/generator/template/public/manifest.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "<%- rootOptions.projectName %>", - "short_name": "<%- rootOptions.projectName %>", - "icons": [ - { - "src": "./img/icons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "./img/icons/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "start_url": "./index.html", - "display": "standalone", - "background_color": "#000000", - "theme_color": "#4DBA87" -} diff --git a/packages/@vue/cli-plugin-pwa/lib/HtmlPwaPlugin.js b/packages/@vue/cli-plugin-pwa/lib/HtmlPwaPlugin.js index b5f060054d..68aa476c78 100644 --- a/packages/@vue/cli-plugin-pwa/lib/HtmlPwaPlugin.js +++ b/packages/@vue/cli-plugin-pwa/lib/HtmlPwaPlugin.js @@ -7,7 +7,26 @@ const defaults = { appleMobileWebAppCapable: 'no', appleMobileWebAppStatusBarStyle: 'default', assetsVersion: '', - manifestPath: 'manifest.json' + manifestPath: 'manifest.json', + manifestOptions: {} +} + +const defaultManifest = { + icons: [ + { + "src": "./img/icons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "./img/icons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + start_url: '.', + display: 'standalone', + background_color: "#000000" } const defaultIconPaths = { @@ -109,6 +128,30 @@ module.exports = class HtmlPwaPlugin { cb(null, data) }) + + + }) + + compiler.hooks.emit.tapAsync(ID, (data, cb) => { + const { + name, + themeColor, + manifestPath, + manifestOptions + } = this.options + const publicOptions = { + name, + short_name: name, + theme_color: themeColor + } + const outputManifest = JSON.stringify( + Object.assign(publicOptions, defaultManifest, manifestOptions) + ) + data.assets[manifestPath] = { + source: () => outputManifest, + size: () => outputManifest.length + } + cb(null, data) }) } }