From d173c618cb5c4ff609c807b1378123d089b41690 Mon Sep 17 00:00:00 2001 From: markthree <1801982702@qq.com> Date: Thu, 22 Feb 2024 16:02:57 +0800 Subject: [PATCH] fix(nuxt): sort global middleware on layers, close #25891 --- packages/nuxt/src/core/templates.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/core/templates.ts b/packages/nuxt/src/core/templates.ts index 55ee480e135f..d0739c2e2e44 100644 --- a/packages/nuxt/src/core/templates.ts +++ b/packages/nuxt/src/core/templates.ts @@ -7,7 +7,7 @@ import escapeRE from 'escape-string-regexp' import { hash } from 'ohash' import { camelCase } from 'scule' import { filename } from 'pathe/utils' -import type { NuxtTemplate } from 'nuxt/schema' +import type { NuxtMiddleware, NuxtTemplate } from 'nuxt/schema' import { annotatePlugins, checkForCircularDependencies } from './app' export const vueShim: NuxtTemplate = { @@ -208,14 +208,21 @@ export const layoutTemplate: NuxtTemplate = { export const middlewareTemplate: NuxtTemplate = { filename: 'middleware.mjs', getContents ({ app }) { - const globalMiddleware = app.middleware.filter(mw => mw.global) + const globalMiddleware = sortGlobalMiddleware(app.middleware.filter(mw => mw.global)) const namedMiddleware = app.middleware.filter(mw => !mw.global) const namedMiddlewareObject = genObjectFromRawEntries(namedMiddleware.map(mw => [mw.name, genDynamicImport(mw.path)])) + return [ ...globalMiddleware.map(mw => genImport(mw.path, genSafeVariableName(mw.name))), `export const globalMiddleware = ${genArrayFromRaw(globalMiddleware.map(mw => genSafeVariableName(mw.name)))}`, `export const namedMiddleware = ${namedMiddlewareObject}` ].join('\n') + function sortGlobalMiddleware (globalMiddleware: NuxtMiddleware[]): NuxtMiddleware[] { + const reg = /^\d/ + const withOrdergGobalMiddleware = globalMiddleware.filter(m => reg.test(m.name)).toSorted((l, r) => l.name > r.name ? 1 : -1) + const withoutOrdergGobalMiddleware = globalMiddleware.filter(m => !reg.test(m.name)) + return [...withOrdergGobalMiddleware, ...withoutOrdergGobalMiddleware] + } } }