mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-23 14:15:13 +00:00
fix: fix issues with route normalization (#8462)
Co-authored-by: Clark Du <clark.duxin@gmail.com>
This commit is contained in:
parent
e97051adfa
commit
966796fbdf
@ -10,7 +10,7 @@
|
|||||||
"index.d.ts"
|
"index.d.ts"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/ufo": "^0.0.3",
|
"@nuxt/ufo": "^0.1.0",
|
||||||
"@nuxt/utils": "2.14.10",
|
"@nuxt/utils": "2.14.10",
|
||||||
"consola": "^2.15.0",
|
"consola": "^2.15.0",
|
||||||
"create-require": "^1.1.1",
|
"create-require": "^1.1.1",
|
||||||
|
@ -7,7 +7,7 @@ import uniq from 'lodash/uniq'
|
|||||||
import consola from 'consola'
|
import consola from 'consola'
|
||||||
import destr from 'destr'
|
import destr from 'destr'
|
||||||
import { TARGETS, MODES, guardDir, isNonEmptyString, isPureObject, isUrl, getMainModule, urlJoin, getPKG } from '@nuxt/utils'
|
import { TARGETS, MODES, guardDir, isNonEmptyString, isPureObject, isUrl, getMainModule, urlJoin, getPKG } from '@nuxt/utils'
|
||||||
import { normalizeURL } from '@nuxt/ufo'
|
import { normalizeURL, withTrailingSlash } from '@nuxt/ufo'
|
||||||
import { defaultNuxtConfigFile, getDefaultNuxtConfig } from './config'
|
import { defaultNuxtConfigFile, getDefaultNuxtConfig } from './config'
|
||||||
|
|
||||||
export function getNuxtConfig (_options) {
|
export function getNuxtConfig (_options) {
|
||||||
@ -124,10 +124,7 @@ export function getNuxtConfig (_options) {
|
|||||||
defaultsDeep(options, modePreset || options.modes[MODES.universal])
|
defaultsDeep(options, modePreset || options.modes[MODES.universal])
|
||||||
|
|
||||||
// Sanitize router.base
|
// Sanitize router.base
|
||||||
if (!/\/$/.test(options.router.base)) {
|
options.router.base = withTrailingSlash(normalizeURL(options.router.base))
|
||||||
options.router.base += '/'
|
|
||||||
}
|
|
||||||
options.router.base = normalizeURL(options.router.base)
|
|
||||||
|
|
||||||
// Legacy support for export
|
// Legacy support for export
|
||||||
if (options.export) {
|
if (options.export) {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/ufo": "^0.0.3",
|
"@nuxt/ufo": "^0.1.0",
|
||||||
"consola": "^2.15.0",
|
"consola": "^2.15.0",
|
||||||
"fs-extra": "^8.1.0",
|
"fs-extra": "^8.1.0",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
|
@ -201,7 +201,7 @@ export const createRoutes = function createRoutes ({
|
|||||||
} else if (key === 'index' && i + 1 === keys.length) {
|
} else if (key === 'index' && i + 1 === keys.length) {
|
||||||
route.path += i > 0 ? '' : '/'
|
route.path += i > 0 ? '' : '/'
|
||||||
} else {
|
} else {
|
||||||
route.path += normalizeURL(getRoutePathExtension(key))
|
route.path += '/' + normalizeURL(getRoutePathExtension(key))
|
||||||
if (key.startsWith('_') && key.length > 1) {
|
if (key.startsWith('_') && key.length > 1) {
|
||||||
route.path += '?'
|
route.path += '?'
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
"index.d.ts"
|
"index.d.ts"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/ufo": "^0.0.3",
|
"@nuxt/ufo": "^0.1.0",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"unfetch": "^4.2.0",
|
"unfetch": "^4.2.0",
|
||||||
"vue": "^2.6.12",
|
"vue": "^2.6.12",
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
"thread-loader": "^2.1.3",
|
"thread-loader": "^2.1.3",
|
||||||
"time-fix-plugin": "^2.0.7",
|
"time-fix-plugin": "^2.0.7",
|
||||||
"url-loader": "^2.3.0",
|
"url-loader": "^2.3.0",
|
||||||
|
"url-polyfill": "^1.1.12",
|
||||||
"vue-loader": "^15.9.5",
|
"vue-loader": "^15.9.5",
|
||||||
"webpack": "^4.44.2",
|
"webpack": "^4.44.2",
|
||||||
"webpack-bundle-analyzer": "^3.9.0",
|
"webpack-bundle-analyzer": "^3.9.0",
|
||||||
|
@ -63,7 +63,7 @@ export default class WebpackClientConfig extends WebpackBaseConfig {
|
|||||||
cacheGroups.commons === undefined
|
cacheGroups.commons === undefined
|
||||||
) {
|
) {
|
||||||
cacheGroups.commons = {
|
cacheGroups.commons = {
|
||||||
test: /node_modules[\\/](vue|vue-loader|vue-router|vuex|vue-meta|core-js|@babel\/runtime|axios|webpack|setimmediate|timers-browserify|process|regenerator-runtime|cookie|js-cookie|is-buffer|dotprop|nuxt\.js)[\\/]/,
|
test: /node_modules[\\/](vue|vue-loader|vue-router|vuex|vue-meta|core-js|@babel\/runtime|axios|webpack|setimmediate|timers-browserify|process|regenerator-runtime|cookie|js-cookie|is-buffer|dotprop|url-polyfill|nuxt\.js)[\\/]/,
|
||||||
chunks: 'all',
|
chunks: 'all',
|
||||||
name: true,
|
name: true,
|
||||||
priority: 10
|
priority: 10
|
||||||
@ -205,6 +205,11 @@ export default class WebpackClientConfig extends WebpackBaseConfig {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add URL polyfill for IE11 support with ufo
|
||||||
|
if (!this.isModern && !this.isServer) {
|
||||||
|
config.entry.app.unshift(require.resolve('url-polyfill/url-polyfill.min.js'))
|
||||||
|
}
|
||||||
|
|
||||||
// Add friendly error plugin
|
// Add friendly error plugin
|
||||||
if (this.dev && !quiet && friendlyErrors) {
|
if (this.dev && !quiet && friendlyErrors) {
|
||||||
config.plugins.push(
|
config.plugins.push(
|
||||||
|
@ -20,20 +20,20 @@ describe('nuxt basic resources size limit', () => {
|
|||||||
it('should stay within the size limit range in legacy mode', async () => {
|
it('should stay within the size limit range in legacy mode', async () => {
|
||||||
const legacyResourcesSize = await getResourcesSize(distDir, 'client', { gzip: true, brotli: true })
|
const legacyResourcesSize = await getResourcesSize(distDir, 'client', { gzip: true, brotli: true })
|
||||||
|
|
||||||
const LEGACY_JS_RESOURCES_KB_SIZE = 201
|
const LEGACY_JS_RESOURCES_KB_SIZE = 217
|
||||||
expect(legacyResourcesSize.uncompressed).toBeWithinSize(LEGACY_JS_RESOURCES_KB_SIZE)
|
expect(legacyResourcesSize.uncompressed).toBeWithinSize(LEGACY_JS_RESOURCES_KB_SIZE)
|
||||||
|
|
||||||
const LEGACY_JS_RESOURCES_GZIP_KB_SIZE = 70
|
const LEGACY_JS_RESOURCES_GZIP_KB_SIZE = 70
|
||||||
expect(legacyResourcesSize.gzip).toBeWithinSize(LEGACY_JS_RESOURCES_GZIP_KB_SIZE)
|
expect(legacyResourcesSize.gzip).toBeWithinSize(LEGACY_JS_RESOURCES_GZIP_KB_SIZE)
|
||||||
|
|
||||||
const LEGACY_JS_RESOURCES_BROTLI_KB_SIZE = 60
|
const LEGACY_JS_RESOURCES_BROTLI_KB_SIZE = 64
|
||||||
expect(legacyResourcesSize.brotli).toBeWithinSize(LEGACY_JS_RESOURCES_BROTLI_KB_SIZE)
|
expect(legacyResourcesSize.brotli).toBeWithinSize(LEGACY_JS_RESOURCES_BROTLI_KB_SIZE)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should stay within the size limit range in modern mode', async () => {
|
it('should stay within the size limit range in modern mode', async () => {
|
||||||
const modernResourcesSize = await getResourcesSize(distDir, 'modern', { gzip: true, brotli: true })
|
const modernResourcesSize = await getResourcesSize(distDir, 'modern', { gzip: true, brotli: true })
|
||||||
|
|
||||||
const MODERN_JS_RESOURCES_KB_SIZE = 172
|
const MODERN_JS_RESOURCES_KB_SIZE = 180
|
||||||
expect(modernResourcesSize.uncompressed).toBeWithinSize(MODERN_JS_RESOURCES_KB_SIZE)
|
expect(modernResourcesSize.uncompressed).toBeWithinSize(MODERN_JS_RESOURCES_KB_SIZE)
|
||||||
|
|
||||||
const MODERN_JS_RESOURCES_GZIP_KB_SIZE = 60
|
const MODERN_JS_RESOURCES_GZIP_KB_SIZE = 60
|
||||||
|
13
yarn.lock
13
yarn.lock
@ -1955,10 +1955,10 @@
|
|||||||
rc9 "^1.2.0"
|
rc9 "^1.2.0"
|
||||||
std-env "^2.2.1"
|
std-env "^2.2.1"
|
||||||
|
|
||||||
"@nuxt/ufo@^0.0.3":
|
"@nuxt/ufo@^0.1.0":
|
||||||
version "0.0.3"
|
version "0.1.0"
|
||||||
resolved "https://registry.npmjs.org/@nuxt/ufo/-/ufo-0.0.3.tgz#7673a54b81c020e7aea3a9e01e09a58c494a1eca"
|
resolved "https://registry.npmjs.org/@nuxt/ufo/-/ufo-0.1.0.tgz#4943741c4300b73e4f1de09cad684ed4e9235502"
|
||||||
integrity sha512-LQkuVafVNB9+ggRF7443AX1V1rEWRs32Frk7F2qnRLf8j/SzRzxEZ99jiZqxVho72zU7NcWQ6Jy62m4fkZC6Wg==
|
integrity sha512-7az26cl4TaNejTFlgwcGRIGPFH6tD8dLh1t+Q+BWIM8UQqqV9o2DH9yKcVlboP+LdocLBUC+OTOiZc0RSZh0bA==
|
||||||
|
|
||||||
"@nuxtjs/eslint-config@^5.0.0":
|
"@nuxtjs/eslint-config@^5.0.0":
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
@ -13205,6 +13205,11 @@ url-loader@^2.3.0:
|
|||||||
mime "^2.4.4"
|
mime "^2.4.4"
|
||||||
schema-utils "^2.5.0"
|
schema-utils "^2.5.0"
|
||||||
|
|
||||||
|
url-polyfill@^1.1.12:
|
||||||
|
version "1.1.12"
|
||||||
|
resolved "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.12.tgz#6cdaa17f6b022841b3aec0bf8dbd87ac0cd33331"
|
||||||
|
integrity sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==
|
||||||
|
|
||||||
url@^0.11.0:
|
url@^0.11.0:
|
||||||
version "0.11.0"
|
version "0.11.0"
|
||||||
resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
|
resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
|
||||||
|
Loading…
Reference in New Issue
Block a user