经过尝试,文档和技术氛围国内跟不上,建议还是优先考虑 Nuxt

新技术QA
技术名称 Gridsome@0.7.23—2021-05-12
文档官网 https://gridsome.org/
作者、技术团队 不熟悉
能做解决什么问题 JAMstack for vue2.js
特点、优点 jamstack,vue2,ssg,插件优秀,内容源api或者源文件都可以,有roapmap
同类选型 nuxt(完整、名气), vuepress(仅md)
缺点、踩坑注意 没中文文档,b站视频没有中文资源,社区讨论不多,vue3还在路上
宣传语 A Jamstack framework for Vue.js
选型关键词 vue,ssg,mit

注意:默认项目启动比较费劲,参考 https://juejin.cn/post/6897487792696524808 进行配置。之所以慢似乎是为了内置图片组件的渐进展示。

经过实践,进入依赖安装之后,可以取消,直接无脑 cnpm i 就能安装上。

提到 jamstack 和 vue,首先想到的就是 Nuxt,今天介绍另一个选型方案:gridsome

内容源可以来自 api、数据文件、Markdown文件,这一点上比 vuepress 舒服。官方维护了很多插件,看着还不错。

基本命令

列出几个命令:

  1. # 安装全局依赖
  2. npm i -g @gridsome/cli
  3. # 创建项目
  4. gridsome create demo
  5. # 默认创建项目并执行安装,最后会构建依赖多半会卡住,直接取消
  6. cnpm i
  7. # 启动项目
  8. npm run develop

注意:

  • 发现卡住就使用 cnpm i 来完成安装。

    零碎笔记

基本介绍不提

  • @gridsome/source-filesystem 内容源是文件
  • 模板中,使用 <page-query> 获取graphQL 注入到 this.$page
  • server.js 中,通过 loadSource 异步获取数据并存入 collection 中,见下方
  • @gridsome/source-contentful 插件用来管理远程资源,有了数据再补充对应的模板

官方案例中有这样一段代码用来说明如何从api里获取数据:

  1. module.exports = function (api) {
  2. api.loadSource(async ({ addCollection }) => {
  3. // Fetch data from APIs 从api中获取数据
  4. const { data } = await axios.get('https://any.api.com')
  5. // Create a new GraphQL Collection 创建一个collection
  6. const posts = addCollection('Post')
  7. // Add data to the new collection 把具体数据添加到 collection
  8. for (const item of data) {
  9. posts.addNode({
  10. id: item.id,
  11. title: item.title,
  12. date: item.date,
  13. content: item.content
  14. })
  15. }
  16. })
  17. }

这个数据会放入本地服务器中,方便后续渲染。

核心概念:

  • pages,常规操作,基于文件的路由 /pages 下的文件就是页面
  • collections, 这是graphQL的概念,相当于内存中的数据库,渲染时候从这里获取数据
  • templates,上面collections数据对应的模板 src/templates 得细看
  • layouts,可以放全局,不用导入
  • images,内置 g-image 组件,可以做到实时调整和模糊图像
  • linking,不需要 router-link 了,内置了 g-link

pages 就和nuxt一样,自动实现路由。
src/pages/404.vue

点击查看【bilibili】
看了YouTube上的一个博主的教学视频,发现graphql这块是完全不懂。

上手难度好大,弃了,短时间内搞不定,不如nuxt。


https://gitee.com/klinq/blob-with-gridsome

-1 参考链接

掘金介绍
https://juejin.cn/post/6949724161157627918
https://juejin.cn/post/6949395217153785864
https://juejin.cn/post/6899766387690962957#heading-29
https://juejin.cn/post/6897487792696524808
https://juejin.cn/post/6906022040994578440#heading-23

github
https://github.com/gridsome/gridsome-starter-blog
https://github.com/itsnwa/gridsome-forestry-starter
https://github.com/kendallstrautman/brevifolia-gridsome-forestry
https://github.com/strapi/strapi-starter-gridsome-blog

和nuxt比较

很多概念比较相似:

  • ssr/ssg
  • 抽象路由

感觉gridsome更倾向于 gragql 的结合?