mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-17 06:01:34 +00:00
feat: add crossorigin for normal ssr (#6950)
This commit is contained in:
parent
c785f6e22e
commit
16587029d7
@ -50,19 +50,18 @@ export default class ModernRenderer extends SSRRenderer {
|
||||
return scripts
|
||||
}
|
||||
|
||||
const scriptPattern = /<script[^>]*?src="([^"]*?)"[^>]*?>[^<]*?<\/script>/g
|
||||
const scriptPattern = /<script[^>]*?src="([^"]*?)" defer><\/script>/g
|
||||
|
||||
const modernScripts = scripts.replace(scriptPattern, (scriptTag, jsFile) => {
|
||||
const legacyJsFile = jsFile.replace(this.publicPath, '')
|
||||
const modernJsFile = this.assetsMapping[legacyJsFile]
|
||||
const { build: { crossorigin } } = this.options
|
||||
const cors = `${crossorigin ? ` crossorigin="${crossorigin}"` : ''}`
|
||||
const moduleTag = modernJsFile
|
||||
? scriptTag
|
||||
.replace('<script', `<script type="module"${cors}`)
|
||||
.replace(legacyJsFile, modernJsFile)
|
||||
: ''
|
||||
const noModuleTag = scriptTag.replace('<script', `<script nomodule${cors}`)
|
||||
if (!modernJsFile) {
|
||||
return scriptTag
|
||||
}
|
||||
const moduleTag = scriptTag
|
||||
.replace('<script', `<script type="module"`)
|
||||
.replace(legacyJsFile, modernJsFile)
|
||||
const noModuleTag = scriptTag.replace('<script', `<script nomodule`)
|
||||
|
||||
return noModuleTag + moduleTag
|
||||
})
|
||||
@ -108,9 +107,9 @@ export default class ModernRenderer extends SSRRenderer {
|
||||
if (!modernJsFile) {
|
||||
return ''
|
||||
}
|
||||
const { crossorigin } = this.options.build
|
||||
const cors = `${crossorigin ? ` crossorigin="${crossorigin}"` : ''}`
|
||||
return linkTag.replace('rel="preload"', `rel="modulepreload"${cors}`).replace(legacyJsFile, modernJsFile)
|
||||
return linkTag
|
||||
.replace('rel="preload"', `rel="modulepreload"`)
|
||||
.replace(legacyJsFile, modernJsFile)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,15 @@ export default class SSRRenderer extends BaseRenderer {
|
||||
}
|
||||
|
||||
renderScripts (renderContext) {
|
||||
return renderContext.renderScripts()
|
||||
const scripts = renderContext.renderScripts()
|
||||
const { build: { crossorigin } } = this.options
|
||||
if (!crossorigin) {
|
||||
return scripts
|
||||
}
|
||||
return scripts.replace(
|
||||
/<script/g,
|
||||
`<script crossorigin="${crossorigin}"`
|
||||
)
|
||||
}
|
||||
|
||||
getPreloadFiles (renderContext) {
|
||||
@ -28,7 +36,15 @@ export default class SSRRenderer extends BaseRenderer {
|
||||
}
|
||||
|
||||
renderResourceHints (renderContext) {
|
||||
return renderContext.renderResourceHints()
|
||||
const resourceHints = renderContext.renderResourceHints()
|
||||
const { build: { crossorigin } } = this.options
|
||||
if (!crossorigin) {
|
||||
return resourceHints
|
||||
}
|
||||
return resourceHints.replace(
|
||||
/rel="preload"/g,
|
||||
`rel="preload" crossorigin="${crossorigin}"`
|
||||
)
|
||||
}
|
||||
|
||||
createRenderer () {
|
||||
|
Loading…
Reference in New Issue
Block a user