Nuxt3.15.1 升级到 3.15.2 ,同时 nuxt/content@3.0.0-alpha.8 升级到了 3.0.0-alpha.9
npx nuxi@latest upgrade --force
运行后 nuxt/content 会同步升级,慎重!
queryCollectionNavigation 的查询结果发生了改变
比如,我的这个collection定义如下:
book: defineCollection({
type: 'page',
source: {
include: 'book/**/*.md',
exclude: ['book/**/-*.md'],
repository: 'https://github.com/aatrooox/Blog',
authToken: process.env.CONTENT_REPO_TOKEN
},
schema: z.object({
date: z.date(),
lastmod: z.date(),
tags: z.array(z.string()),
versions: z.array(z.string()),
})
}),
// book/nuxt-book1/install/demo.md
alpha.8 时, queryCollectionNavigation
是不会包含最外层的目录的。数组直接以 nuxt-book1
开始,现在会最顶层的 book
也带上,导致我的博客小册相关的查询都要重构一下,这更新多少有点抽象了,不懂为什么改成这样的逻辑。
const { data: books } = await useAsyncData('navigation', () => {
return queryCollectionNavigation('book', ['date', 'path', 'id'])
})
以前 books.value
就是 book 目录下的文件树,现在 books
是包含了根节点的整棵树
所以如何涉及到使用此导航树渲染的菜单都要改
另外,由于查询默认带上了根节点,所以导致每个文件的 path
也附带了完整的路径,从这个角度上看,这样改是合理的。
如果以前跳转时,自己拼接了前缀,也要去掉
同时因为 path
是完整的路径了,所以查询单个 book
时, 直接用 .path
就行了
const { data: page, error, refresh } = await useAsyncData(hash(route.path + 'page'), () => {
// 删掉前缀
return queryCollection('book').path(route.path).first()
}, { watch: [route.query]})
上个版本应该是不行的,不然我应该不会用 id 查
总之,查询单个md内容,直接用 queryCollection().path()
就行
而涉及到 queryCollectionNavigation
的部分,总结就是不管怎么筛选和查询,他会始终附带根节点