Skip to content

Commit

Permalink
fix(server): use path.posix.join to generate public path (vuejs#8177)
Browse files Browse the repository at this point in the history
  • Loading branch information
HerringtonDarkholme authored and hefeng committed Jan 25, 2019
1 parent 24355de commit 799071c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/server/template-renderer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export default class TemplateRenderer {
// extra functionality with client manifest
if (options.clientManifest) {
const clientManifest = this.clientManifest = options.clientManifest
this.publicPath = clientManifest.publicPath.replace(/\/$/, '')
this.publicPath = clientManifest.publicPath
// preload/prefetch directives
this.preloadFiles = (clientManifest.initial || []).map(normalizeFile)
this.prefetchFiles = (clientManifest.async || []).map(normalizeFile)
Expand Down Expand Up @@ -114,7 +114,7 @@ export default class TemplateRenderer {
return (
// render links for css files
(cssFiles.length
? cssFiles.map(({ file }) => `<link rel="stylesheet" href="${this.publicPath}/${file}">`).join('')
? cssFiles.map(({ file }) => `<link rel="stylesheet" href="${this.getPublicPath(file)}">`).join('')
: '') +
// context.styles is a getter exposed by vue-style-loader which contains
// the inline component styles collected during SSR
Expand Down Expand Up @@ -153,7 +153,7 @@ export default class TemplateRenderer {
extra = ` type="font/${extension}" crossorigin`
}
return `<link rel="preload" href="${
this.publicPath}/${file
this.getPublicPath(file)
}"${
asType !== '' ? ` as="${asType}"` : ''
}${
Expand All @@ -179,7 +179,7 @@ export default class TemplateRenderer {
if (alreadyRendered(file)) {
return ''
}
return `<link rel="prefetch" href="${this.publicPath}/${file}">`
return `<link rel="prefetch" href="${this.getPublicPath(file)}">`
}).join('')
} else {
return ''
Expand All @@ -206,7 +206,7 @@ export default class TemplateRenderer {
const async = (this.getUsedAsyncFiles(context) || []).filter(({ file }) => isJS(file))
const needed = [initial[0]].concat(async || [], initial.slice(1))
return needed.map(({ file }) => {
return `<script src="${this.publicPath}/${file}" defer></script>`
return `<script src="${this.getPublicPath(file)}" defer></script>`
}).join('')
} else {
return ''
Expand All @@ -228,6 +228,10 @@ export default class TemplateRenderer {
}
return new TemplateStream(this, this.parsedTemplate, context || {})
}

getPublicPath (file: string) {
return path.posix.join(this.publicPath, file)
}
}

function normalizeFile (file: string): Resource {
Expand Down
1 change: 1 addition & 0 deletions test/ssr/ssr-template.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ function generateClientManifest (file, cb) {
compileWithWebpack(file, {
output: {
path: '/',
publicPath: '/',
filename: '[name].js'
},
optimization: {
Expand Down

0 comments on commit 799071c

Please sign in to comment.