diff --git a/lib/manifest/module.js b/lib/manifest/module.js index 930e1f5d..193c537c 100755 --- a/lib/manifest/module.js +++ b/lib/manifest/module.js @@ -29,7 +29,8 @@ function addManifest (pwa) { background_color: '#ffffff', theme_color: this.options.loading && this.options.loading.color, lang: 'en', - useWebmanifestExtension: false + useWebmanifestExtension: false, + fileName: 'manifest.[hash].[ext]' } const options = { ...defaults, ...pwa.manifest } @@ -39,16 +40,12 @@ function addManifest (pwa) { delete manifest.src delete manifest.publicPath delete manifest.useWebmanifestExtension + delete manifest.fileName - // Stringify manifest & generate hash - const manifestSource = JSON.stringify(manifest) - const manifestFileName = `manifest.${ - hash(manifestSource).substr(0, 8) - }.${ - options.useWebmanifestExtension - ? 'webmanifest' - : 'json' - }` + // Generate file name + const manifestFileName = options.fileName + .replace('[hash]', hash(JSON.stringify(manifest)).substr(0, 8)) + .replace('[ext]', options.useWebmanifestExtension ? 'webmanifest' : 'json') // Merge final manifest into options.manifest for other modules if (!this.options.manifest) { @@ -57,6 +54,7 @@ function addManifest (pwa) { Object.assign(this.options.manifest, manifest) // Register webpack plugin to emit manifest + const manifestSource = JSON.stringify(manifest, null, 2) this.options.build.plugins.push({ apply (compiler) { compiler.hooks.emit.tap('nuxt-pwa-manifest', (compilation) => { diff --git a/test/__snapshots__/pwa.test.js.snap b/test/__snapshots__/pwa.test.js.snap index 2ce3a93a..ddf9ceeb 100644 --- a/test/__snapshots__/pwa.test.js.snap +++ b/test/__snapshots__/pwa.test.js.snap @@ -17,7 +17,7 @@ Array [ "fixture/.nuxt/dist/client/icons/icon_384.b8f3a1.png", "fixture/.nuxt/dist/client/icons/icon_512.b8f3a1.png", "fixture/.nuxt/dist/client/icons/icon_64.b8f3a1.png", - "fixture/.nuxt/dist/client/manifest.bee706d5.webmanifest", + "fixture/.nuxt/dist/client/manifest_test.webmanifest", "fixture/.nuxt/dist/server", "fixture/.nuxt/dist/server/index.spa.html", "fixture/.nuxt/dist/server/index.ssr.html", @@ -44,7 +44,7 @@ Array [ "fixture/dist/_nuxt/icons/icon_384.b8f3a1.png", "fixture/dist/_nuxt/icons/icon_512.b8f3a1.png", "fixture/dist/_nuxt/icons/icon_64.b8f3a1.png", - "fixture/dist/_nuxt/manifest.bee706d5.webmanifest", + "fixture/dist/_nuxt/manifest_test.webmanifest", "fixture/dist/icon.png", "fixture/dist/index.html", "fixture/dist/offline.html", diff --git a/test/fixture/nuxt.config.js b/test/fixture/nuxt.config.js index e3f3fde5..6397f32e 100644 --- a/test/fixture/nuxt.config.js +++ b/test/fixture/nuxt.config.js @@ -13,7 +13,8 @@ module.exports = { manifest: { name: 'Test Project Name', description: 'Test Project Description', - useWebmanifestExtension: true + useWebmanifestExtension: true, + fileName: 'manifest_test.[ext]?[hash]' }, workbox: { diff --git a/test/pwa.test.js b/test/pwa.test.js index 9bf02260..96707888 100644 --- a/test/pwa.test.js +++ b/test/pwa.test.js @@ -36,8 +36,8 @@ describe('pwa', () => { test('icons purpose', () => { const assetDir = path.join(nuxt.options.generate.dir, '_nuxt') - const manifestFileName = fs.readdirSync(assetDir).find(item => item.match(/^manifest.+\.json$/i)) - const manifestContent = JSON.parse(fs.readFileSync(path.join(assetDir, manifestFileName))) + const manifestFileName = fs.readdirSync(assetDir).find(item => item.match(/^manifest./i)) + const manifestContent = JSON.parse(fs.readFileSync(path.join(assetDir, manifestFileName.split('?')[0]))) expect(manifestContent.icons).toEqual( expect.arrayContaining([ expect.objectContaining({