рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрда рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИрдВред рдЕрд░реНрдерд╛рддред рдЯрд╛рдЗрдк 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$/"}
}
) {...}
рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдк 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
рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред
рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
рдореИрдВ рдлрд╝реЛрд▓реНрдбрд░ 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/
ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@ tsiq-swyx рдореИрдВ
collection
рдлрд╝реАрд▓реНрдб рдХреЛFile
рд╕реЗMarkdownRemark
рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВредregex
рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╛рдЬреБрдХ рд╣реИред