message: fix(ssr): fix ssr template publicPath generation
  fix
diff: @@ -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 }) => `<link rel="stylesheet" href="${this.getPublicPath(file)}">`).join('')
  + ? cssFiles.map(({ file }) => `<link rel="stylesheet" href="${this.publicPath}${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 `<link rel="preload" href="${
  - this.getPublicPath(file)
  + this.publicPath}${file
  }"${
  asType !== '' ? ` as="${asType}"` : ''
  }${
  @@ -179,7 +182,7 @@ export default class TemplateRenderer {
  if (alreadyRendered(file)) {
  return ''
  }
  - return `<link rel="prefetch" href="${this.getPublicPath(file)}">`
  + return `<link rel="prefetch" href="${this.publicPath}${file}">`
  }).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 `<script src="${this.getPublicPath(file)}" defer></script>`
  + return `<script src="${this.publicPath}${file}" defer></script>`
  }).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 {
  