Skip to content

Commit a2d0f48

Browse files
authored
fix: render modules with async and omit prefetch type (#26)
* fix: render modules with `async` and omit prefetch type * fix: remove `defer`/`async` rendering * fix: add `defer` if not module
1 parent 0ced3c4 commit a2d0f48

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

src/renderer.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,15 +335,19 @@ export function renderPreloadLinks (ssrContext: SSRContext, rendererContext: Ren
335335

336336
export function renderPrefetchLinks (ssrContext: SSRContext, rendererContext: RendererContext): string {
337337
const { prefetch } = getRequestDependencies(ssrContext, rendererContext)
338-
return Object.values(prefetch).map(({ path }) =>
339-
`<link ${isModule(path) ? 'type="module" ' : ''}rel="prefetch${isCSS(path) ? ' stylesheet' : ''}" href="${rendererContext.publicPath}${path}">`
338+
return Object.values(prefetch).map(({ path }) => {
339+
const rel = 'prefetch' + (isCSS(path) ? ' stylesheet' : '')
340+
const as = isJS(path) ? ' as="script"' : ''
341+
342+
return `<link rel="${rel}"${as} href="${rendererContext.publicPath}${path}">`
343+
}
340344
).join('')
341345
}
342346

343347
export function renderScripts (ssrContext: SSRContext, rendererContext: RendererContext): string {
344348
const { scripts } = getRequestDependencies(ssrContext, rendererContext)
345349
return Object.values(scripts).map(({ path, type }) =>
346-
`<script${type === 'module' ? ' type="module"' : ''} src="${rendererContext.publicPath}${path}" defer></script>`
350+
`<script${type === 'module' ? ' type="module"' : ''} src="${rendererContext.publicPath}${path}"${type !== 'module' ? ' defer' : ''}></script>`
347351
).join('')
348352
}
349353

test/renderer.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ describe('renderer', () => {
2121
const { renderScripts } = await getRenderer()
2222
const result = renderScripts().split('</script>').slice(0, -1).map(s => `${s}</script>`).sort()
2323
expect(result).to.deep.equal([
24-
'<script type="module" src="/entry.mjs" defer></script>',
25-
'<script type="module" src="/index.mjs" defer></script>'
24+
'<script type="module" src="/entry.mjs"></script>',
25+
'<script type="module" src="/index.mjs"></script>'
2626
])
2727
})
2828
it('renders styles correctly', async () => {
@@ -80,7 +80,7 @@ describe('renderer with legacy manifest', () => {
8080
expect(result).to.deep.equal(
8181
[
8282
'<link rel="prefetch stylesheet" href="/_nuxt/pages/another.css">', // dynamic import CSS
83-
'<link rel="prefetch" href="/_nuxt/pages/another.js">', // dynamic import
83+
'<link rel="prefetch" as="script" href="/_nuxt/pages/another.js">', // dynamic import
8484
'<link rel="preload" href="/_nuxt/app.css" as="style">', // entrypoint CSS
8585
'<link rel="preload" href="/_nuxt/app.js" as="script">',
8686
'<link rel="preload" href="/_nuxt/commons/app.js" as="script">',

0 commit comments

Comments
 (0)