补充:其实不依赖 defineOptions 插件设置 name 的方式也可以实现。
App.vue
<template>
    <div id="app" class="container">
        <router-view v-slot="{ Component }">
            <keep-alive>
                <component :is="Component" :key="$route.name" v-if="$route.meta.keepAlive" />
            </keep-alive>
            <component :is="Component" :key="$route.name" v-if="!$route.meta.keepAlive" />
        </router-view>
    </div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
#app {
}
</style>
 
 
router.js
import { closeToast } from 'vant'
import { Router, createRouter, createWebHashHistory } from 'vue-router'
const routes = [
    { name: 'address', path: '/address', component: () => import('@/views/address/index.vue'), meta: { title: '地址', keepAlive: true } }, },
]
const router: Router = createRouter({
    scrollBehavior: () => ({ left: 0, top: 0 }),
    routes,
    history: createWebHashHistory()
})
router.afterEach((to) => {
    closeToast()
})
export default router
 
 
 
App.vue
<template>
    <div id="app" class="container">
        <router-view v-slot="{ Component }">
            <keep-alive :include="['peopleList', 'addressList']">
                <component :is="Component" />
            </keep-alive>
        </router-view>
    </div>
</template>
 
 
peopleList.vue
defineOptions({ 
    name: 'peopleList' 
})
 
 
defineOptions 插件
 
vue3 setup 语法糖配置 name 属性需要使用 defineOptions 插件
pnpm i unplugin-vue-define-options
 
 
vite.config.js
import DefineOptions from 'unplugin-vue-define-options/vite'
plugins: [
    DefineOptions(),
]
 
 
tsconfig.json
{
    "compilerOptions": {
        "types": ["unplugin-vue-define-options/macros-global"]
    },
}