Skip to content

Commit 6cebc93

Browse files
authored
fix(webpack): include css/assets at top level of manifest (#36)
1 parent 42061e9 commit 6cebc93

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

src/webpack.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ export function normalizeWebpackManifest (manifest: WebpackClientManifest): Mani
101101
css: mappedIndexes.filter(isCSS),
102102
assets: mappedIndexes.filter(i => !isJS(i) && !isCSS(i))
103103
}
104+
105+
for (const key of ['css', 'assets'] as const) {
106+
for (const file of clientManifest[moduleId as Identifier][key] || []) {
107+
clientManifest[file] = clientManifest[file] || { file, ...parseResource(file) }
108+
}
109+
}
104110
}
105111

106112
return clientManifest

test/compat.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ describe('renderer with webpack manifest', () => {
7979
it('renders styles correctly', async () => {
8080
const { renderStyles } = await getRenderer()
8181
expect(renderStyles()).to.equal(
82-
'<link rel="stylesheet" href="/_nuxt/app.css">'
82+
'<link rel="stylesheet" href="/_nuxt/app.css"><link rel="stylesheet" href="/_nuxt/some.css">'
8383
)
8484
})
8585
it('renders resource hints correctly', async () => {
@@ -88,12 +88,14 @@ describe('renderer with webpack manifest', () => {
8888
expect(result).to.deep.equal(
8989
[
9090
'<link rel="prefetch stylesheet" href="/_nuxt/pages/another.css">', // dynamic import CSS
91+
'<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/img/logo.41f2f89.svg">',
9192
'<link rel="prefetch" as="script" href="/_nuxt/pages/another.js">', // dynamic import
9293
'<link rel="preload" as="script" href="/_nuxt/app.js">',
9394
'<link rel="preload" as="script" href="/_nuxt/commons/app.js">',
9495
'<link rel="preload" as="script" href="/_nuxt/pages/index.js">', // dynamic entrypoint
9596
'<link rel="preload" as="script" href="/_nuxt/runtime.js">',
96-
'<link rel="preload" as="style" href="/_nuxt/app.css">' // css used directly on the page
97+
'<link rel="preload" as="style" href="/_nuxt/app.css">', // css used directly on the page
98+
'<link rel="preload" as="style" href="/_nuxt/some.css">'
9799
]
98100
)
99101
})

test/fixtures/webpack-manifest.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
"pages/another.css",
1111
"pages/another.js",
1212
"pages/index.js",
13-
"runtime.js"
13+
"runtime.js",
14+
"img/logo.41f2f89.svg",
15+
"some.css"
1416
],
1517
"initial": [
1618
"runtime.js",
@@ -24,8 +26,8 @@
2426
"pages/index.js"
2527
],
2628
"modules": {
27-
"4d87aad8": [3,4],
28-
"630f1d84": [3,4],
29-
"56940b2e": [8]
29+
"4d87aad8": [3, 4],
30+
"630f1d84": [3, 4],
31+
"56940b2e": [8, 10, 11]
3032
}
3133
}

test/manifest.test.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@ describe('webpack manifest', () => {
1919
},
2020
'56940b2e': {
2121
file: '',
22-
assets: [],
23-
css: [],
22+
assets: [
23+
'img/logo.41f2f89.svg'
24+
],
25+
css: [
26+
'some.css'
27+
],
2428
imports: [
2529
'_pages/index.js'
2630
]
@@ -85,9 +89,18 @@ describe('webpack manifest', () => {
8589
resourceType: 'style',
8690
file: 'app.css'
8791
},
92+
'img/logo.41f2f89.svg': {
93+
file: 'img/logo.41f2f89.svg',
94+
mimeType: 'image/svg+xml',
95+
resourceType: 'image'
96+
},
8897
'pages/another.css': {
8998
resourceType: 'style',
9099
file: 'pages/another.css'
100+
},
101+
'some.css': {
102+
file: 'some.css',
103+
resourceType: 'style'
91104
}
92105
})
93106
})

0 commit comments

Comments
 (0)