feat: add crossorigin for normal ssr (#6950)

This commit is contained in:
Xin Du (Clark) 2020-02-24 22:58:24 +00:00 committed by GitHub
parent c785f6e22e
commit 16587029d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 14 deletions

View File

@ -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)
})
}

View File

@ -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 () {