diff --git a/src/server/template-renderer/index.js b/src/server/template-renderer/index.js
index 2c95e31fd5a..05ce8c49cf7 100644
--- a/src/server/template-renderer/index.js
+++ b/src/server/template-renderer/index.js
@@ -60,7 +60,10 @@ export default class TemplateRenderer {
// extra functionality with client manifest
if (options.clientManifest) {
const clientManifest = this.clientManifest = options.clientManifest
- this.publicPath = clientManifest.publicPath
+ // ensure publicPath ends with /
+ this.publicPath = clientManifest.publicPath === ''
+ ? ''
+ : clientManifest.publicPath.replace(/([^\/])$/, '$1/')
// preload/prefetch directives
this.preloadFiles = (clientManifest.initial || []).map(normalizeFile)
this.prefetchFiles = (clientManifest.async || []).map(normalizeFile)
@@ -114,7 +117,7 @@ export default class TemplateRenderer {
return (
// render links for css files
(cssFiles.length
- ? cssFiles.map(({ file }) => ``).join('')
+ ? cssFiles.map(({ file }) => ``).join('')
: '') +
// context.styles is a getter exposed by vue-style-loader which contains
// the inline component styles collected during SSR
@@ -153,7 +156,7 @@ export default class TemplateRenderer {
extra = ` type="font/${extension}" crossorigin`
}
return ``
+ return ``
}).join('')
} else {
return ''
@@ -206,7 +209,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 ``
+ return ``
}).join('')
} else {
return ''
@@ -228,10 +231,6 @@ 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 {