Nuxt.js中keep-alive页面缓存规则在generate模式下失效问题
Nuxt.js 2.15.8 静态生成模式下Keep-Alive规则失效的解决办法
问题根源
Nuxt的generate模式是预渲染静态页面,页面组件的name在静态构建阶段会被优化处理,和开发模式下自动生成的路径式name不一致,导致你通过页面路径配置的include/exclude规则无法匹配到目标组件。
具体解决步骤
给目标页面显式设置组件名
在pages/basket.vue中手动添加明确的name选项,替代Nuxt自动生成的动态名称:<script> export default { name: 'BasketPage', // 自定义固定组件名 // 其他页面逻辑代码 } </script>调整Keep-Alive的匹配规则
将之前基于页面路径的配置改为匹配组件的显式name:- 排除Basket页面缓存:
<Nuxt keep-alive :keep-alive-props="{ exclude: ['BasketPage'] }" /> - 仅缓存Basket页面:
<Nuxt keep-alive :keep-alive-props="{ include: ['BasketPage'] }" />
- 排除Basket页面缓存:
验证静态生成结果
执行yarn generate构建静态文件后,本地预览或部署验证缓存规则是否生效。
补充说明
开发模式下Nuxt会临时将页面路径作为组件name的一部分,所以路径匹配能生效,但静态构建阶段会做组件名称优化,必须显式指定name才能让Keep-Alive的规则稳定生效。如果有多个页面需要配置,都需要给对应页面添加明确的name选项。
内容的提问来源于stack exchange,提问作者ema
相关产品推荐
相关产品推荐

