fix: fix issues with route normalization (#8462)

Co-authored-by: Clark Du <clark.duxin@gmail.com>
This commit is contained in:
pooya parsa 2020-12-10 00:19:31 +01:00 committed by GitHub
parent e97051adfa
commit 966796fbdf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 25 additions and 17 deletions

View File

@ -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",

View File

@ -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) {

View File

@ -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",

View File

@ -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 += '?'
} }

View File

@ -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",

View File

@ -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",

View File

@ -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(

View File

@ -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

View File

@ -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"