Gatsby: yaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдирд╡ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: gatsbyjs/gatsby

рд╣рд╛рдп рд╕рдм, рдХреНрдпрд╛ рдореБрдЭреЗ рдпрдорд▓ рдкреЗрдЬ рдХреЗ рднреАрддрд░ рдорд╛рд░реНрдХрдбрд╛рдЙрди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреБрдЫ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ? рдореИрдВ jekyll рд╕реЗ gatsby рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди jekyll рдХреА рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рддрд░рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ markdownify рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП yaml рдлрд╝рд╛рдЗрд▓ рд╕реЗ) рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдереАред рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рдерд╛ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдХрдИ рдЯреБрдХрдбрд╝реЗ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдкреГрд╖реНрда рдкрд░ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдПрдХ yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рде рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг:

- title: My Title
  image: ./assets/image.png
  description: >
    Here is a long winded description that includes a [link](https://code-somewhere.com).
- title: Second Item
  image: ./assets/image2.png
  description >
    more text ...

рдПрдХ рд╕рдорд╛рди рдиреЛрдЯ рдкрд░, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдЫрд╡рд┐ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реИрдХреА рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬреИрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡реЗрдмрдкреИрдХ рдХреЛ pages/ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЫрд╡рд┐ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ

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

рдЫрд╡рд┐рдпреЛрдВ рдкрд░, рдпрджрд┐ рдЖрдк gatsby-source-filesystem + gatsby-transformer-yaml + gatsby-transformer-sharp/gatsby-plugin-sharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ gatsbyjs.org рд▓реЗрдЦрдХ рдЕрд╡рддрд╛рд░реЛрдВ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рддрд╛ рд╣реИ

https://github.com/gatsbyjs/gatsby/blob/master/www/src/templates/template-blog-post.js#L306 & https://github.com/gatsbyjs/gatsby/blob/master/docs/ рдмреНрд▓реЙрдЧ/author.yaml

рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ yaml рдлрд╝реАрд▓реНрдб рдЪрд▓рд╛рдиреЗ рдкрд░ - рдЖрдк рдЙрдк-рдиреЛрдбреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рдореАрдбрд┐рдпрд╛рдЯрд╛рдЗрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ gatsby-transformer-remark рдЙрдиреНрд╣реЗрдВ html рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ рдЬреИрд╕реЗ https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e160cb0b84f5e2a/packages /gatsby-source-contentful/src/normalize.js#L143

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реБрдкрд░ рд╣рд╛рдИ-рд▓реЗрд╡рд▓ рд╣реИ рдФрд░ рдмрд╣реБрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред Gatsby рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реЗрдЯрдЕрдк рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реЛрдЧ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ yaml => рдорд╛рд░реНрдХрдбрд╛рдЙрди => html рдХреЗ рд▓рд┐рдП рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Gatsby рдХреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВред

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

рдЫрд╡рд┐рдпреЛрдВ рдкрд░, рдпрджрд┐ рдЖрдк gatsby-source-filesystem + gatsby-transformer-yaml + gatsby-transformer-sharp/gatsby-plugin-sharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ gatsbyjs.org рд▓реЗрдЦрдХ рдЕрд╡рддрд╛рд░реЛрдВ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рддрд╛ рд╣реИ

https://github.com/gatsbyjs/gatsby/blob/master/www/src/templates/template-blog-post.js#L306 & https://github.com/gatsbyjs/gatsby/blob/master/docs/ рдмреНрд▓реЙрдЧ/author.yaml

рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ yaml рдлрд╝реАрд▓реНрдб рдЪрд▓рд╛рдиреЗ рдкрд░ - рдЖрдк рдЙрдк-рдиреЛрдбреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рдореАрдбрд┐рдпрд╛рдЯрд╛рдЗрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ gatsby-transformer-remark рдЙрдиреНрд╣реЗрдВ html рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ рдЬреИрд╕реЗ https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e160cb0b84f5e2a/packages /gatsby-source-contentful/src/normalize.js#L143

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реБрдкрд░ рд╣рд╛рдИ-рд▓реЗрд╡рд▓ рд╣реИ рдФрд░ рдмрд╣реБрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред Gatsby рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реЗрдЯрдЕрдк рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд▓реЛрдЧ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ yaml => рдорд╛рд░реНрдХрдбрд╛рдЙрди => html рдХреЗ рд▓рд┐рдП рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Gatsby рдХреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВред

рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрднреА рдПрдХ рдЧреИрдЯреНрд╕рдмреА рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░рд╛ рдмреЗрд╡рдХреВрдл рд╕рдорд╛рдзрд╛рди рд╣реИ:

import data from './_data.yaml'
import markdownIt from 'markdown-it'
const md = markdownIt({
  html: true,
  linkify: true
})
const loadedData = data.map(item => ({
  ...item,
  image: item.image && require(item.image),
  description: md.render(item.description)
}))

рдпрд╣ рдЕрднреА рднреА рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдПрдХрд╛рдзрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ 'рдореЙрдбреНрдпреВрд▓' рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
```
рдкреГрд╖реНрда/
рдПрдХ рдкреЗрдЬ/
index.js
_data.yml
рд╕рдВрдкрддреНрддрд┐рдпрд╛рдВ/
img1.png
рдПрдХ рдЕрдиреНрдп рдкреЗрдЬ/
...

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ onCreateNode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред https://www.gatsbyjs.org/tutorial/part-four/#programmatically -creating-pages-from-data рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ createNodeField рд╕рд╛рде рдПрдХ рдирдП рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдЖрдк рдмрд╕ рдЕрдкрдиреЗ gatsby-node.js . рдореЗрдВ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

totsteps picture totsteps  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Oppenheimer1 picture Oppenheimer1  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kalinchernev picture kalinchernev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hobochild picture hobochild  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

magicly picture magicly  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ