Gatsby: рдкреНрд░рд╢реНрди: рдореИрдВ gatsby-source-filesystem рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд╡реЗрд░реА рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬреБрд▓ре░ 2017  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: gatsbyjs/gatsby

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрда рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИрдВред рдЕрд░реНрдерд╛рддред рдЯрд╛рдЗрдк 1, рдЯрд╛рдЗрдк 2, рдЖрджрд┐ рдЬрд┐рд╕рдореЗрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред

pages
   --type1
   --type2

рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ gatsby-transformer-remark рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддреА рд╣реИрдВред
рдореИрдВ рдЯрд╛рдЗрдк 1, рдЯрд╛рдЗрдк 2, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЯрд╛рдЗрдк 1 рд╕реВрдЪреА рдкреЗрдЬ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЯрд╛рдЗрдк 1 рдкреЗрдЬреЛрдВ рдХреА рд╕реВрдЪреА рд╣реЛред

gatsby-config.js

   {
      resolve: 'gatsby-source-filesystem',
      options: {
        path: `${__dirname}/src/pages/type1`,
        name: 'type1',
      },
    },
    {
      resolve: 'gatsby-source-filesystem',
      options: {
        path: `${__dirname}/src/pages/type2`,
        name: 'type2',
      },
    },

рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рдереА рдХрд┐ рдЖрдк name рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рдереЗред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

{
  someQueryForGatsbySourceFilesystem(
    filter: {
      name: {
        eq: "type1"
      }
    }
  ) {
    edges {
      node {
        childMarkdownRemark {
          html
        }
      }
    }
  }
}

рдореИрдВрдиреЗ рдСрд▓рд╕рд╛рдЗрдЯ рдФрд░ рдСрд▓рдлрд╛рдЗрд▓ рдЬреИрд╕реЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред
рдореИрдВрдиреЗ рднреА рдХреЛрд╢рд┐рд╢ рдХреА

  allSitePlugin(filter: {
    pluginOptions: {
      name: {
        eq: "type1"
      }
    }
  })

рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:

"Cannot query field \"childMarkdownRemark\" on type \"SitePlugin\".",

рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛? рдкрде рдХреЗ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ allFile рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╛рдиреА рдПрдХ regex рдЬреЛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ type1 рдФрд░ рдорд╛рд░реНрдХрд╢реАрдЯ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рддрд╛ рд╣реИ)?

 allFile(
  filter: {
    absolutePath:{regex:"/(type1)\/.*\\.md$/"}
  }
) {...}
question or discussion

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ tsiq-swyx рдореИрдВ collection рдлрд╝реАрд▓реНрдб рдХреЛ File рд╕реЗ MarkdownRemark рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

exports.onCreateNode = ({ node, boundActionCreators, getNode }) => {
  const { createNodeField } = boundActionCreators

  if (_.get(node, 'internal.type') === `MarkdownRemark`) {
    // Get the parent node
    const parent = getNode(_.get(node, 'parent'))

    // Create a field on this node for the "collection" of the parent
    // NOTE: This is necessary so we can filter `allMarkdownRemark` by
    // `collection` otherwise there is no way to filter for only markdown
    // documents of type `post`.
    createNodeField({
      node,
      name: 'collection',
      value: _.get(parent, 'sourceInstanceName'),
    })

regex рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╛рдЬреБрдХ рд╣реИред

рд╕рднреА 20 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк allMarkdownRemark рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрде рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

{
   allMarkdownRemark(
    sort: { order: DESC, fields: [frontmatter___date]},
    filter: {fileAbsolutePath: {regex: "/(type1)/.*\\.md$/"}}
  ) {
      edges {
        node {
          excerpt(pruneLength: 250)
          id
          frontmatter {
            title
            date(formatString: "MMMM DD, YYYY")
            path
          }
        }
      }
    }
}

рдлрд╝рд╛рдЗрд▓ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реНрд░реЛрдд рдЙрджрд╛рд╣рд░рдг рдирд╛рдо sourceInstanceName рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

рд░реЗрдЧреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдорд╣рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП gatsbyjs.org рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

BTW, рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд┐рдХреНрд╡реЗрд▓ рдорд╣рд╛рди рд╣реИред

@KyleAMathews allMarkdownRemark рдХреНрд╡реЗрд░реА рдореЗрдВ sourceInstanceName рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдХрд╢реАрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдиреЛрдб рдХрд╛ sourceInstanceName рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдкрдереЛрдВ рдкрд░ рд░реЗрдЧреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХреВрдВред

{
  allMarkdownRemark {
    edges {
      node {
        sourceInstanceName
      }
    }
  }
}

рд▓реЗрдХрд┐рди GraphQL рдбрд┐рдмрдЧрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ sourceInstanceName рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

рдЖрдк рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░, рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдХрд┐рдВрдЧ рдиреЛрдб рдХреЗ fileAbsolutePath рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ:

{
  allMarkdownRemark {
    edges {
      node {
        fileAbsolutePath
      }
    }
  }
}

рдФрд░ рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреБрдЫ рддрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ /pages/blog/ рдпрд╛ /pages/projects/ ред рд▓реЗрдХрд┐рди рдпрд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдЕрдЧрд░ рдЧреИрдЯреНрд╕рдмреА рд╕рд╛рдЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рддрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ? (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрдЧрд░ рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреБрдЫ рдпрд╛рдж рдХрд┐рдпрд╛ред)

@ рдиреНрд╕реНрд╡рдиреЗрд╢ рдиреЗ allFile рдмреЛрд▓реА рд▓рдЧрд╛рдИ рдФрд░ рд╡рд╣рд╛рдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ред рдЖрдк internal.mediaType рджреНрд╡рд╛рд░рд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@KyleAMathews рдлреНрд░рдВрдЯрдореЗрдЯрд░ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде allFile рдкрд░ рдПрдХ рдХреНрд╡реЗрд░реА рдХреИрд╕реЗ рдЬреЛрдбрд╝рддреА рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

рдореИрдВ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ frontmatter allFile рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред

screen shot 2018-02-25 at 8 18 51 p m

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВ рдлрд╝реЛрд▓реНрдбрд░ posts рдФрд░ pages рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ content рдФрд░ рдореЗрд░реЗ gatsby-config.js рдЕрдВрдХ content ред

export const query = graphql`
  query IndexQuery {
    allMarkdownRemark(
      filter: { fileAbsolutePath: {regex : "\/posts/"} },
      sort: {fields: [frontmatter___date], order: DESC},
    ) {
      totalCount
      edges {
        node {
          id
          frontmatter {
            title
            slug
            date(formatString: "DD MMMM YYYY")
            category
          }
          excerpt
        }
      }
    }
  }
`;

@lukejanicke рдореЗрд░реЗ рдЕрдВрддрд┐рдо рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдВрдиреЗ рдиреЛрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ allFile рдиреЛрдбреНрд╕ рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдирдП allMarkdownRemark рдиреЛрдбреНрд╕ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╛рдпрд╛, allFile рдореЗрдВ рдлреНрд░рдВрдЯрдореИрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЫрд╛рдВрдЯрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдорд╛рд░реНрдХрдб рдкрд╛рд░реНрд╕рд░ рдЕрдВрджрд░ рдШреБрд╕ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрдЧреЗрдХреНрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирд╛рдЬреБрдХ рд╣реИред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ onCreateNode рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдХ рдиреЛрдб рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдиреЛрдб рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдирд╛рдо (filesystem рд╕реНрд░реЛрдд рдкреНрд▓рдЧ рдЗрди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ) рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдерд╛ рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рдкрд╛рд╕ allMarkdownRemark рдЕрдВрджрд░ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@KyleAMathews рдиреЗ рд╕рд▓рд╛рд╣ рджреА (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд░реЛрдд рдирд╛рдо projects )

allFile(filter: {internal: {mediaType: {eq: "text/markdown"}}, sourceInstanceName: {eq: "projects"}}) {
  edges {
    node {
      childMarkdownRemark {
        frontmatter {
            ...
        }
      }
    }
  }
}

@gbouteiller рд╕рдЪ рд╣реИ, рдХрд┐ frontmatter рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рдПрдХ рдХреЛ sourceInstanceName рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ, рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ frontmatter рдЕрдВрджрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЫрд╛рдВрдЯ рд╕рдХрддреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдпрд╣рд╛рдВ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рддрд┐рдерд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред рджрд┐рдирд╛рдВрдХ рдХреЛ рдЖрдорддреМрд░ рдкрд░ frontmatter рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

frontmatter рд╕реЗ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ sourceInstanceName рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВред sourceInstanceName File рдиреЛрдб рд╕реЗ markdownRemark рдиреЛрдб рдореЗрдВ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдПрдХ regex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдХреЗ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИред

рдпрджрд┐ рдЫрдВрдЯрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ childMarkdownRemark file рдкрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛ рдФрд░ рдирд┐рд░рд╛рд╢ рдерд╛ рдХрд┐ "рдирд╛рдо" рдлрд╝реАрд▓реНрдб does not рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ markdownR рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯреА рдЬреАрдд рд╣реИ рдЬреЛ рд╣рдо рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмрд┐рдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдкрде рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдк рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

query AllQuery {
    DSes: allMarkdownRemark(
      limit: 3
      filter: { id: { regex: "/_design-systems/" } }
    ) {
      edges {
        node {
          frontmatter {
            title
            date
            company
            link
            image
            description
          }
          fields {
            slug
          }
        }
      }
    }

    Articles: allMarkdownRemark(
      limit: 3
      filter: { id: { regex: "/_articles/" } }
    ) {
      edges {
        node {
          frontmatter {
            title
            date
            company
            link
            image
            description
          }
          fields {
            slug
          }
        }
      }
    }
  }

рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ name рдлрд╝реАрд▓реНрдб рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ gatsby- рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ dx рдХреЛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ gatsby-transformer-remark рдмрд╛рдж рд╕реЗ рдПрдХ рдХреНрд╡реЗрд░реА / рдлрд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдирд╛ gatsby-source-filesystem ред

@ tsiq-swyx рдореИрдВ collection рдлрд╝реАрд▓реНрдб рдХреЛ File рд╕реЗ MarkdownRemark рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

exports.onCreateNode = ({ node, boundActionCreators, getNode }) => {
  const { createNodeField } = boundActionCreators

  if (_.get(node, 'internal.type') === `MarkdownRemark`) {
    // Get the parent node
    const parent = getNode(_.get(node, 'parent'))

    // Create a field on this node for the "collection" of the parent
    // NOTE: This is necessary so we can filter `allMarkdownRemark` by
    // `collection` otherwise there is no way to filter for only markdown
    // documents of type `post`.
    createNodeField({
      node,
      name: 'collection',
      value: _.get(parent, 'sourceInstanceName'),
    })

regex рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╛рдЬреБрдХ рд╣реИред

@chmac рдпрд╣ рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред @Kyleamathews рдЖрдкрдХреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ (рдпрджрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП lmk рд╣реИ), рд▓реЗрдХрд┐рди рдХреНрдпрд╛ gatsby-source-filesystem рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (sourceInstanceName рдХреЛ рдиреЛрдб рдХреНрд╖реЗрддреНрд░ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд░рдирд╛)?

@ tsiq-swyx рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! ;-)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ gatsby рдмрдирд╛рдП рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрди рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордЬрдмреВрдд рд░рд╛рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрд╡рд╛рдВрдЫрд┐рдд рдкреАрдЖрд░ рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ :)

рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ createPages рдирд┐рд░реНрдпрд╛рдд рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ рдХрд┐ gatsby-source-filesystem рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдореЗрдВ AllFile рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЬрд┐рд╕рд╕реЗ рднреНрд░рдо рдкреИрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдореИ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
const { createPage } = actions const result = await graphql(` query { allMarkdownRemark { edges { node { fields { slug } frontmatter { lang } } } } } `)
рдФрд░ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреЗрдЬ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд gatsby-source-git рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

рдзрдиреНрдпрд╡рд╛рдж @chmac

рдореБрдЭреЗ gatsby-source-filesystem рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рд╣реИрдВ ...

рддреЛ рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:

const { createFilePath } = require("gatsby-source-filesystem")

exports.onCreateNode = ({ node, actions, getNode }) => {
  const { createNodeField } = actions

  if (node.internal.type === `Mdx` && getNode(node.parent).sourceInstanceName === "careers") {
    const value = createFilePath({ node, getNode })

    createNodeField({
      name: "slug",
      node,
      value: `/careers${value}`
    })
  }
}

рдпрд╣ рдШреБрд╕рдкреИрда рд╣реИ, рдХрднреА рднреА рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ред рдиреЛрдб рдореМрдЬреВрдж рд╣реИ

рд╕реЛрдорд╡рд╛рд░, 27 рдЕрдкреНрд░реИрд▓ 2020 рдХреЛ рдиреЛрдорд╛рди рдЧреБрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:

рдзрдиреНрдпрд╡рд╛рдж @chmac https://github.com/chmac

рдореБрдЭреЗ gatsby-source-filesystem рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреЗрдЬ рдмрдирд╛рдиреЗ рд╣реИрдВ ...

рддреЛ рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:

const {createFilePath} = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдЧреИрдЯреНрд╕рдмреА-рд╕реЛрд░реНрд╕-рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо")
Export.onCreateNode = ({рдиреЛрдб, рдХреНрд░рд┐рдпрд╛рдПрдБ, getNode}) => {
const {createNodeField} = рдХреНрд░рд┐рдпрд╛рдПрдБ

if (node.internal.type === Mdx && getNode (node.parent) .sourceInstanceName === "рдХрд░рд┐рдпрд░") {
const value = createFilePath ({рдиреЛрдб, getNode})

createNodeField({
  name: "slug",
  node,
  value: `/careers${value}`
})

}
}

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/gatsbyjs/gatsby/issues/1634#issuecomment-61967088883 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAEQPFX6KR7NUIY33Q7V4MDROTS7PANCNFSM4DUUPK6A
ред

рдореИрдВ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж; рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдФрд░ рдЧреИрд░-рд╣реИрдХреА рд╕рдорд╛рдзрд╛рди рд╣реИ:

{
  allMarkdownRemark(filter: {fileAbsolutePath: {regex: "/projects/"}}) {
    edges {
      node {
        frontmatter {
          title
        }
      }
    }
  }
}

рдореЗрд░реА projects рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА /content/projects/ ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕