Gatsby v2-使用标记为页面生成静态HTML时出错

Gatsby v2-使用标记为页面生成静态HTML时出错,gatsby,netlify-cms,Gatsby,Netlify Cms,这是我第一次尝试使用盖茨比v2。我有一个test.md文件,它是由netlify cms创建的,它位于blog文件夹中,正如您在上面的文件系统中看到的那样 我还可以在浏览器中使用GraphiQL查询数据,如上所述 我得到了一个博客帖子列表(1),这是一个链接,但没有生成可访问的页面。当我运行gatsby build时,我得到一个错误 为页面生成静态HTML时出错失败 6 | }) { 7 | const { markdownRemark } = data // data.mark

这是我第一次尝试使用盖茨比v2。我有一个test.md文件,它是由netlify cms创建的,它位于blog文件夹中,正如您在上面的文件系统中看到的那样

我还可以在浏览器中使用GraphiQL查询数据,如上所述

我得到了一个博客帖子列表(1),这是一个链接,但没有生成可访问的页面。当我运行
gatsby build
时,我得到一个错误

为页面生成静态HTML时出错失败

   6 | }) {
   7 |   const { markdownRemark } = data // data.markdownRemark holds our post data
>  8 |   const { frontmatter, html } = markdownRemark
     |           ^
   9 |   return (
  10 |     <div className="blog-post-container">
  11 |       <div className="blog-post">
页面/index.js

module.exports = {
    siteMetadata: {
        title: `simco-cms`,
    },
    plugins: [
        `gatsby-plugin-netlify-cms`,
        `gatsby-transformer-remark`,
        {
            resolve: `gatsby-source-filesystem`,
            options: {
                path: `${__dirname}/blog`,
                name: "markdown-pages",
            },
        },
    ],
}
import React from "react"

import { graphql } from "gatsby"
import PostLink from "../components/postLink"

const IndexPage = ({
  data: {
    allMarkdownRemark: { edges },
  },
}) => {
  const Posts = edges
    .filter(edge => !!edge.node.frontmatter.date)
    .map(edge => <PostLink key={edge.node.id} post={edge.node} />)

  return <div>{Posts}</div>
}

export default IndexPage

export const pageQuery = graphql`
  query {
    allMarkdownRemark(sort: { order: DESC, fields: [frontmatter___date] }) {
      edges {
        node {
          id
          excerpt(pruneLength: 250)
          frontmatter {
            date(formatString: "MMMM DD, YYYY")
            path
            title
          }
        }
      }
    }
  }
`
const path = require("path")

exports.createPages = ({ actions, graphql }) => {
  const { createPage } = actions

  const blogPostTemplate = path.resolve(`src/templates/blogTemplate.js`)

  return graphql(`
    {
      allMarkdownRemark(
        sort: { order: DESC, fields: [frontmatter___date] }
        limit: 1000
      ) {
        edges {
          node {
            frontmatter {
              path
            }
          }
        }
      }
    }
  `).then(result => {
    if (result.errors) {
      return Promise.reject(result.errors)
    }

    result.data.allMarkdownRemark.edges.forEach(({ node }) => {
      createPage({
        path: node.frontmatter.path,
        component: blogPostTemplate,
        context: {}, // additional data can be passed via context
      })
    })
  })
}
import React from "react"
import { graphql } from "gatsby"

export default function Template({
  data, // this prop will be injected by the GraphQL query below.
}) {
  const { markdownRemark } = data // data.markdownRemark holds our post data
  const { frontmatter, html } = markdownRemark
  return (
    <div className="blog-post-container">
      <div className="blog-post">
        <h1>{frontmatter.title}</h1>
        <h2>{frontmatter.date}</h2>
        <div
          className="blog-post-content"
          dangerouslySetInnerHTML={{ __html: html }}
        />
      </div>
    </div>
  )
}

export const pageQuery = graphql`
  query($path: String!) {
    markdownRemark(frontmatter: { path: { eq: $path } }) {
      html
      frontmatter {
        date(formatString: "MMMM DD, YYYY")
        path
        title
      }
    }
  }
`
模板/blogTemplate.js

module.exports = {
    siteMetadata: {
        title: `simco-cms`,
    },
    plugins: [
        `gatsby-plugin-netlify-cms`,
        `gatsby-transformer-remark`,
        {
            resolve: `gatsby-source-filesystem`,
            options: {
                path: `${__dirname}/blog`,
                name: "markdown-pages",
            },
        },
    ],
}
import React from "react"

import { graphql } from "gatsby"
import PostLink from "../components/postLink"

const IndexPage = ({
  data: {
    allMarkdownRemark: { edges },
  },
}) => {
  const Posts = edges
    .filter(edge => !!edge.node.frontmatter.date)
    .map(edge => <PostLink key={edge.node.id} post={edge.node} />)

  return <div>{Posts}</div>
}

export default IndexPage

export const pageQuery = graphql`
  query {
    allMarkdownRemark(sort: { order: DESC, fields: [frontmatter___date] }) {
      edges {
        node {
          id
          excerpt(pruneLength: 250)
          frontmatter {
            date(formatString: "MMMM DD, YYYY")
            path
            title
          }
        }
      }
    }
  }
`
const path = require("path")

exports.createPages = ({ actions, graphql }) => {
  const { createPage } = actions

  const blogPostTemplate = path.resolve(`src/templates/blogTemplate.js`)

  return graphql(`
    {
      allMarkdownRemark(
        sort: { order: DESC, fields: [frontmatter___date] }
        limit: 1000
      ) {
        edges {
          node {
            frontmatter {
              path
            }
          }
        }
      }
    }
  `).then(result => {
    if (result.errors) {
      return Promise.reject(result.errors)
    }

    result.data.allMarkdownRemark.edges.forEach(({ node }) => {
      createPage({
        path: node.frontmatter.path,
        component: blogPostTemplate,
        context: {}, // additional data can be passed via context
      })
    })
  })
}
import React from "react"
import { graphql } from "gatsby"

export default function Template({
  data, // this prop will be injected by the GraphQL query below.
}) {
  const { markdownRemark } = data // data.markdownRemark holds our post data
  const { frontmatter, html } = markdownRemark
  return (
    <div className="blog-post-container">
      <div className="blog-post">
        <h1>{frontmatter.title}</h1>
        <h2>{frontmatter.date}</h2>
        <div
          className="blog-post-content"
          dangerouslySetInnerHTML={{ __html: html }}
        />
      </div>
    </div>
  )
}

export const pageQuery = graphql`
  query($path: String!) {
    markdownRemark(frontmatter: { path: { eq: $path } }) {
      html
      frontmatter {
        date(formatString: "MMMM DD, YYYY")
        path
        title
      }
    }
  }
`
从“React”导入React
从“盖茨比”导入{graphql}
导出默认函数模板({
data,//此道具将由下面的GraphQL查询注入。
}) {
const{markdownmark}=data//data.markdownmark保存我们的post数据
const{frontmatter,html}=markdownmark
返回(
{frontmatter.title}
{frontmatter.date}
)
}
export const pageQuery=graphql`
查询($path:String!){
markdownRemark(frontmatter:{path:{eq:$path}}){
html
前沿物质{
日期(格式字符串:“MMMM DD,YYYY”)
路径
标题
}
}
}
`

要解析到标记的路径相对于项目/存储库位置的根。传递到模板的路径必须是绝对路径,查询才能解析
$path
处的数据

blog/test.md

---
path: test
date: 2018-11-05T16:25:21.303Z
title: test
---
test  
如果您确实希望此博客文章的路径为
/test
,请更改路径:

---
path: /test
date: 2018-11-05T16:25:21.303Z
title: test
---
test  

否则,请将其更改为
path:/blog/test

,当您意识到这是一个路径问题时,谢谢!