在Gridsome中,显示来自多个目录的文章列表

※這篇文章是轉載自我的部落格,如果您也有興趣,歡迎點擊觀看〜

首先

Gridsome可以将各种数据显示为静态网站。这次我们将讨论在创建社团网站时遇到的问题,并整理了如何显示多个目录下的Markdown文件列表的方法。

如果对这篇文章有任何建议或反馈,请在评论框或联系我的GitHub上告知,因为这篇文章中的内容是我个人的解释。

Gridsome是一个开源的静态站点生成框架,基于Vue.js构建。它使用GraphQL查询来获取数据,并以静态HTML文件的形式生成网站,使网站加载速度更快。Gridsome还支持PWA(渐进式Web应用程序),并具有自动生成优化的图像、代码分割和路由功能。它易于使用且功能强大,适用于个人博客、电子商务网站等各种项目。

让我们超简略地介绍一下Gridsome吧。
Gridsome是一个用Vue编写的静态网站生成器。类似的技术还有用React编写的Gatsby。静态网站生成器是专门用于生成静态网站(如HTML等)的工具,通常在数据交互相对较少的网站(如个人作品集或博客)中使用。

Gridsome是受Gatsby启发而开发的技术,其机制也类似于Gatsby。数据,像CMS或Markdown文件等,被暂时存储在一个称为GraphQL数据层的工具中,然后最终生成静态网站。Gridsome官方网站也对数据层进行了以下解释。

GraphQL数据层是开发模式下可用的工具。这是将所有数据导入Gridsome项目时临时存储的地方。可以将其视为一种本地数据库,可以帮助您更快速和更好地处理数据。

来源:GraphQL 数据层

导入Markdown数据

截至2020年10月3日,开发环境如下所示。

ToolDetailsUbuntu20.04.1 LTS x86_64Node.jsv10.19.0Yarn1.22.5Gridsomev0.7.0

我們將在這個工作中分別用不同的目錄管理新聞和產品的文章,然後將批量的Markdown數據導入GraphQL數據層,並在首頁上顯示。

由于这次想将Markdown文件转换为数据,所以需要引入一个可以将Markdown文件导入到GraphQL数据层的Gridsome插件。使用以下命令将名为@gridsome/vue-remark的插件安装进来。本次使用Yarn进行安装。

$ yarn add @gridsome/vue-remark
    yarn add v1.22.5
    [1/4] Resolving packages...
    [2/4] Fetching packages...
    .
    .
    .
    Done in 10.34s.

完成@gridsome/vue-remark的安装后,将以下内容写入gridsome.config.js。

//gridsome.config.js
module.exports = {
  siteName: 'Gridsome',
  plugins: [
    {
      use: '@gridsome/vue-remark',
      options: {
        typeName: 'NewsPost', // 必須。GraphQL上で扱う型定義
        baseDir: './posts/news', // 記事となるmarkdownファイルを置くディレクトリ
        pathPrefix: '/news', // URLになるパス。必須ではない。
        template: './src/templates/NewsPost.vue' // 記事ページのVueコンポーネントファイルの指定
      }
    },
    {
      use: '@gridsome/vue-remark',
      options: {
        typeName: 'ProductPost',
        baseDir: './posts/products',
        pathPrefix: '/products',
        template: './src/templates/ProductPost.vue'
      }
    }  
  ]
}

使用Gridsome从零开始创建博客 – 参考代码而不是使用Markdown文件来创建文章

这些写作方法已经详细介绍在@gridsome/vue-remark中。这部分可以如下解释。

    • マークダウンファイルをデータとして利用するには、マークダウンファイルを入れておくディレクトリがそれぞれのGraphQL上の型1つにつき1つ必要。

NewsとProductのそれぞれに対して、GraphQL上の型・格納するディレクトリ・パス・テンプレートファイルの指定を行っている。
先程導入したプラグインを、NewsとProductのそれぞれに対して適用させている。

这个gridsome.config.js文件是Gridsome项目的数据配置文件,因此非常重要。这个配置文件决定了是否能够成功加载数据,所以务必要仔细编写。

因为数据定义已经完成,所以现在要创建一个存储Markdown文件的目录作为数据。

mkdir posts/news
mkdir posts/products

在两个news目录和products目录中,我们将以以下格式创建Markdown文件。如果这两个目录中都不存在这种格式的Markdown文件,则会报错,因此请确保两个目录都创建好文件。

---
title: "成功していればここにタイトルが表示されます"
---

## これは最初の投稿です

マークダウンで記事一覧を表示することかできたぞ!やったぜ!  
テンションあがるなァ^〜

通过这种方式创建了一个Markdown文件。被包围的部分被称为”Front Matter”,可以用来描述和设置每个Markdown文件的元数据。当描述Front Matter时,插件会通过GraphQL数据层将元数据导入。具体来说,

    • title: マークダウンファイルでtitleを記述した部分

 

    content: 記事本文

除了这两个之外,

    id: 各マークダウンファイルに紐付けられている一意の文字列

有三个信息已经导入。接下来,根据需要在这些数据层上进行查询。

创建投稿目录页面

然后,我们会在每个页面上编写GraphQL,从导入到数据层的数据中查询所需的数据。我们将在Index.vue中的默认代码中添加查询GraphQL数据的部分。需要注意的是,

广告
将在 10 秒后关闭
bannerAds