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 {