Skip to content

Commit f05353b

Browse files
author
pooya parsa
committed
feat: support manifest.fileName with template
closes #193. Huge thanks to @mdawar and @AlexAsh
1 parent 4484e6c commit f05353b

File tree

4 files changed

+14
-15
lines changed

4 files changed

+14
-15
lines changed

lib/manifest/module.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ function addManifest (pwa) {
2929
background_color: '#ffffff',
3030
theme_color: this.options.loading && this.options.loading.color,
3131
lang: 'en',
32-
useWebmanifestExtension: false
32+
useWebmanifestExtension: false,
33+
fileName: 'manifest.[hash].[ext]'
3334
}
3435

3536
const options = { ...defaults, ...pwa.manifest }
@@ -39,16 +40,12 @@ function addManifest (pwa) {
3940
delete manifest.src
4041
delete manifest.publicPath
4142
delete manifest.useWebmanifestExtension
43+
delete manifest.fileName
4244

43-
// Stringify manifest & generate hash
44-
const manifestSource = JSON.stringify(manifest)
45-
const manifestFileName = `manifest.${
46-
hash(manifestSource).substr(0, 8)
47-
}.${
48-
options.useWebmanifestExtension
49-
? 'webmanifest'
50-
: 'json'
51-
}`
45+
// Generate file name
46+
const manifestFileName = options.fileName
47+
.replace('[hash]', hash(JSON.stringify(manifest)).substr(0, 8))
48+
.replace('[ext]', options.useWebmanifestExtension ? 'webmanifest' : 'json')
5249

5350
// Merge final manifest into options.manifest for other modules
5451
if (!this.options.manifest) {
@@ -57,6 +54,7 @@ function addManifest (pwa) {
5754
Object.assign(this.options.manifest, manifest)
5855

5956
// Register webpack plugin to emit manifest
57+
const manifestSource = JSON.stringify(manifest, null, 2)
6058
this.options.build.plugins.push({
6159
apply (compiler) {
6260
compiler.hooks.emit.tap('nuxt-pwa-manifest', (compilation) => {

test/__snapshots__/pwa.test.js.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Array [
1717
"fixture/.nuxt/dist/client/icons/icon_384.b8f3a1.png",
1818
"fixture/.nuxt/dist/client/icons/icon_512.b8f3a1.png",
1919
"fixture/.nuxt/dist/client/icons/icon_64.b8f3a1.png",
20-
"fixture/.nuxt/dist/client/manifest.bee706d5.webmanifest",
20+
"fixture/.nuxt/dist/client/manifest_test.webmanifest",
2121
"fixture/.nuxt/dist/server",
2222
"fixture/.nuxt/dist/server/index.spa.html",
2323
"fixture/.nuxt/dist/server/index.ssr.html",
@@ -44,7 +44,7 @@ Array [
4444
"fixture/dist/_nuxt/icons/icon_384.b8f3a1.png",
4545
"fixture/dist/_nuxt/icons/icon_512.b8f3a1.png",
4646
"fixture/dist/_nuxt/icons/icon_64.b8f3a1.png",
47-
"fixture/dist/_nuxt/manifest.bee706d5.webmanifest",
47+
"fixture/dist/_nuxt/manifest_test.webmanifest",
4848
"fixture/dist/icon.png",
4949
"fixture/dist/index.html",
5050
"fixture/dist/offline.html",

test/fixture/nuxt.config.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ module.exports = {
1313
manifest: {
1414
name: 'Test Project Name',
1515
description: 'Test Project Description',
16-
useWebmanifestExtension: true
16+
useWebmanifestExtension: true,
17+
fileName: 'manifest_test.[ext]?[hash]'
1718
},
1819

1920
workbox: {

test/pwa.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ describe('pwa', () => {
3636

3737
test('icons purpose', () => {
3838
const assetDir = path.join(nuxt.options.generate.dir, '_nuxt')
39-
const manifestFileName = fs.readdirSync(assetDir).find(item => item.match(/^manifest.+\.json$/i))
40-
const manifestContent = JSON.parse(fs.readFileSync(path.join(assetDir, manifestFileName)))
39+
const manifestFileName = fs.readdirSync(assetDir).find(item => item.match(/^manifest./i))
40+
const manifestContent = JSON.parse(fs.readFileSync(path.join(assetDir, manifestFileName.split('?')[0])))
4141
expect(manifestContent.icons).toEqual(
4242
expect.arrayContaining([
4343
expect.objectContaining({

0 commit comments

Comments
 (0)