mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-26 23:52:06 +00:00
fix(vue-app): enable dynamic publicPath on server-side (#8759)
This commit is contained in:
parent
07dd2cce9b
commit
1196c17a2a
@ -1,6 +1,6 @@
|
|||||||
import { stringify } from 'querystring'
|
import { stringify } from 'querystring'
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import { normalizeURL } from 'ufo'
|
import { normalizeURL, joinURL } from 'ufo'
|
||||||
<% if (fetch.server) { %>import fetch from 'node-fetch'<% } %>
|
<% if (fetch.server) { %>import fetch from 'node-fetch'<% } %>
|
||||||
<% if (features.middleware) { %>import middleware from './middleware.js'<% } %>
|
<% if (features.middleware) { %>import middleware from './middleware.js'<% } %>
|
||||||
import {
|
import {
|
||||||
@ -51,10 +51,6 @@ Vue.component(NuxtLink.name, NuxtLink)
|
|||||||
|
|
||||||
const noopApp = () => new Vue({ render: h => h('div', { domProps: { id: '<%= globals.id %>' } }) })
|
const noopApp = () => new Vue({ render: h => h('div', { domProps: { id: '<%= globals.id %>' } }) })
|
||||||
|
|
||||||
function urlJoin () {
|
|
||||||
return Array.prototype.slice.call(arguments).join('/').replace(/\/+/g, '/')
|
|
||||||
}
|
|
||||||
|
|
||||||
const createNext = ssrContext => (opts) => {
|
const createNext = ssrContext => (opts) => {
|
||||||
// If static target, render on client-side
|
// If static target, render on client-side
|
||||||
ssrContext.redirected = opts
|
ssrContext.redirected = opts
|
||||||
@ -67,7 +63,7 @@ const createNext = ssrContext => (opts) => {
|
|||||||
const $config = ssrContext.runtimeConfig || {}
|
const $config = ssrContext.runtimeConfig || {}
|
||||||
const routerBase = ($config.app && $config.app.basePath) || '<%= router.base %>'
|
const routerBase = ($config.app && $config.app.basePath) || '<%= router.base %>'
|
||||||
if (!opts.path.startsWith('http') && (routerBase !== '/' && !opts.path.startsWith(routerBase))) {
|
if (!opts.path.startsWith('http') && (routerBase !== '/' && !opts.path.startsWith(routerBase))) {
|
||||||
opts.path = urlJoin(routerBase, opts.path)
|
opts.path = joinURL(routerBase, opts.path)
|
||||||
}
|
}
|
||||||
// Avoid loop redirect
|
// Avoid loop redirect
|
||||||
if (decodeURI(opts.path) === decodeURI(ssrContext.url)) {
|
if (decodeURI(opts.path) === decodeURI(ssrContext.url)) {
|
||||||
@ -105,6 +101,9 @@ export default async (ssrContext) => {
|
|||||||
<% } %>
|
<% } %>
|
||||||
// Public runtime config
|
// Public runtime config
|
||||||
ssrContext.nuxt.config = ssrContext.runtimeConfig.public
|
ssrContext.nuxt.config = ssrContext.runtimeConfig.public
|
||||||
|
if (ssrContext.nuxt.config.app) {
|
||||||
|
__webpack_public_path__ = joinURL(ssrContext.nuxt.config.app.cdnURL || '/', ssrContext.nuxt.config.app.assetsPath)
|
||||||
|
}
|
||||||
// Create the app definition and the instance (created for each request)
|
// Create the app definition and the instance (created for each request)
|
||||||
const { app, router<%= (store ? ', store' : '') %> } = await createApp(ssrContext, { ...ssrContext.runtimeConfig.public, ...ssrContext.runtimeConfig.private })
|
const { app, router<%= (store ? ', store' : '') %> } = await createApp(ssrContext, { ...ssrContext.runtimeConfig.public, ...ssrContext.runtimeConfig.private })
|
||||||
const _app = new Vue(app)
|
const _app = new Vue(app)
|
||||||
|
@ -62,6 +62,14 @@ describe('basic ssr', () => {
|
|||||||
expect(fetchCount).toBeGreaterThan(0)
|
expect(fetchCount).toBeGreaterThan(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('dynamic publicPath is used in ssr html', async () => {
|
||||||
|
const { html } = await nuxt.server.renderRoute('/', {
|
||||||
|
resources: resourceLoader
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(html).toContain('<img src="https://cdn.nuxtjs.org/img')
|
||||||
|
})
|
||||||
|
|
||||||
// Close server and ask nuxt to stop listening to file changes
|
// Close server and ask nuxt to stop listening to file changes
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await nuxt.close()
|
await nuxt.close()
|
||||||
|
98
test/fixtures/basic/assets/test.svg
vendored
Normal file
98
test/fixtures/basic/assets/test.svg
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<svg class="NuxtLogo" width="245" height="180" viewBox="0 0 452 342" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
||||||
|
fill="#00C58E"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
||||||
|
fill="#108775"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
||||||
|
fill="#2F495E"
|
||||||
|
/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.7 KiB |
5
test/fixtures/basic/pages/index.vue
vendored
5
test/fixtures/basic/pages/index.vue
vendored
@ -1,3 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<h1>Index page</h1>
|
<div>
|
||||||
|
<h1>Index page</h1>
|
||||||
|
<img src="~/assets/test.svg" />
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
Loading…
Reference in New Issue
Block a user