рдореИрдВ рдлреНрд░рдВрдЯрдореИрдЯрд░ рд╕реЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрдВрдЯреЗрдВрдЯ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдЖрдзреЗ рдмреИрд▓: - рд╢реАрд░реНрд╖рдХ: рдпрд╣ рдкрд╣рд▓рд╛ рд╢реАрд░реНрд╖рдХ рд╣реИ рд╕рд╛рдордЧреНрд░реА:> - ### рдпрд╣ ** рдорд╛рд░реНрдХрдбрд╛рдЙрди ** рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╣реИред - рдпрд╣ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╣реИ - рдпрд╣ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╣реИ - рдпрд╣ рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╣реИ - рд╢реАрд░реНрд╖рдХ: рдпрд╣ рджреВрд╕рд░рд╛ рд╢реАрд░реНрд╖рдХ рд╣реИ рд╕рд╛рдордЧреНрд░реА:> - ### рдпрд╣ ** рдорд╛рд░реНрдХрдбрд╛рдЙрди ** рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╣реИред - рдпрд╣ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╣реИ - рдпрд╣ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╣реИ - рдпрд╣ рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╣реИ
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
рдЖрдзрд╛ рдмреИрд▓реЗрдВрд╕ { рд╢реАрд░реНрд╖рдХ рдЫрд╡рд┐ рд╕рд╛рдордЧреНрд░реА }
рдореИрдВ HTML рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдпрд╛ HTML рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдБ?
рдореИрдВ рдЗрд╕реЗ 'index.md' рдХрд╣рдиреЗ рд╡рд╛рд▓реА рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ HTML рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
npm list gatsby
): gatsby@^1.9.247gatsby --version
): 1.1.50рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрд╛рдЧреЛрдВ 5-7 https://www.gatsbyjs.org/tutorial/
рдЖрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд╕рд╛рде рднреА рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ - рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯрдЕрдк рдХрд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╕рдорд░реНрдерди рд╣реИ - https://www.gatsbyjs.org/docs/gatsby-starter/
рдкреНрд░рд╢реНрди рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ рд╣реИ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
Separate file - let's call it `someContent.md`
```md
### This is the actual content in **MarkDown** format.
- This is the first row
- This is second row
- This is third row
```
and reference that file in your main file (by relative path):
```md
halfBlocks:
- title: This is first title
content: "./someContent.md"
```
then in query you could
```
halfBlocks {
content {
childMarkdownRemark {
html
}
}
```
createNodeField
рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рдирд╛ред рдпрд╣ рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдкреНрд▓рдЧрдЗрди рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ MarkdownR рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдиреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПредрд╣рд╛рдп @KyleAMathews рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдкрд╛рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрдард┐рди рдерд╛ред рдореИрдВ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рдерд╛ред рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://github.com/v4iv/gatsby-starter-business
@ рдбрдл рдореБрдЭреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рддреБрдо рд╕рд╣реА рд╣реЛред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВ рдпрд╣рд╛рдВ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЛ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рддреЛ рд╡реЗ рднреА рдЗрд╕реЗ рджреЗрдЦ рд╕рдХреЗрдВред
рдореИрдВ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдореБрдЭреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рддрдм рддрдХ рдЬрд╛рдиреЗ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрдм рддрдХ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдШрдЯрдХ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдЬрд╛рддреЗ рдЬреЛ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рд╡рд╣рд╛рдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред
рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВред рдЖрдк рдЯрд┐рдкреНрдкрдгреА-рдкреНрд░реАрд╕реЗрдЯ-рд▓рд┐рдВрдЯ-рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рд░рд┐рдорд╛рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
yarn add remark remark-preset-lint-recommended remark-html
рдЖрдпрд╛рдд
import remark from 'remark';
import recommended from 'remark-preset-lint-recommended';
import remarkHtml from 'remark-html';
рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
рдмрд╛рдж рдореЗрдВ рд░реЗрдВрдбрд░ рднрд╛рдЧ рдореЗрдВ content
рдХрд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛:
content = remark()
.use(recommended)
.use(remarkHtml)
.processSync(content).toString();
рдЕрдм рдореИрдВ HTML рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред
рдПрдХ рдФрд░ рдЧреИрдЪрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЖрдпрд╛ рд╣реИред рдЬрдм рдореИрдВ >-
рд╕рд╛рде рдорд▓реНрдЯреАрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рдерд╛:
content: >-
### This is the actual content in **MarkDown** format.
- This is the first row
- This is second row
рд▓реЗрдХрд┐рди рдкрд╛рдЗрдк рдкреНрд░рддреАрдХ |
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
content: |
### This is the actual content in **MarkDown** format.
- This is the first row
- This is second row
рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рдзрдиреНрдпрд╡рд╛рдж!!
рдореИрдВ рдлреНрд░рдВрдЯрдореИрдЯрд░ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ (рд╢реАрд░реНрд╖рдХ, рдФрд░ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрд╢), рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ gatsby-transformer-remark
рдпрд╣ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдЙрджрд╛ title.md
рдПрдХ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝реАрд▓реНрдб рд╣реИред
@omeid @ thorn0 рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕реАрдзреЗ gatsby- рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, рдЖрдк рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ https://github.com/gatsbyjs/gatsby/issues-5729#issuecomment -395701042 рдФрд░ createNodeField
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдпрд╛рдЪрдирд╛, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ gatsby-node.js
рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдЖрдк рд╕рднреА рдиреЗ рдХрд┐рдпрд╛ рд╣реИ:
// Need to `yarn add remark remark-html`, then include the following code in
// gatsby-node.js.
const remark = require('remark');
const remarkHTML = require('remark-html');
exports.onCreateNode = ({ node }) => {
// Conditionals, etc. can be used here, but I omitted those just for example's sake.
const markdown = node.frontmatter.my_field;
node.frontmatter.my_field = remark()
.use(remarkHTML)
.processSync(markdown)
.toString();
return node;
};
рддреЛ рдХреНрдпрд╛ createNodeField
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдареАрдХ рд╣реИ? рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВред
@ thorn0 рдмреЗрд╣рддрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ createNodeField
рдХреЗ рдмрдЬрд╛рдп node.frontmatter.my_field =
рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдХреНрдпреЛрдВрдХрд┐ node
рдордИ рдбрд┐рдмрдЧ рдХреАрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рдкрд░рд┐рдгрд╛рдо
@amitjindal @nshki рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореИрдВрдиреЗ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ-рдШрдЯрдХ" рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд░реА рдЙрддреНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ:
success delete html and css files from previous builds тАФ 0.626 s
success open and validate gatsby-config тАФ 0.018 s
success copy gatsby files тАФ 0.075 s
success onPreBootstrap тАФ 2.782 s
error UNHANDLED EXCEPTION
TypeError: Cannot set property 'Compiler' of null
- index.js:16 plugin
[blog]/[remark-html]/index.js:16:17
- index.js:271 Function.use
[blog]/[unified]/index.js:271:25
- gatsby-node.js:63 exports.onCreateNode.postscriptumsMarkdown.forEach.postscr iptum
/home/projects/blog/gatsby-node.js:63:12
- Array.forEach
- gatsby-node.js:61 Object.exports.onCreateNode
/home/projects/blog/gatsby-node.js:61:29
- api-runner-node.js:110 runAPI
[blog]/[gatsby]/dist/utils/api-runner-node.js:110:36
- api-runner-node.js:187
[blog]/[gatsby]/dist/utils/api-runner-node.js:187:33
- map.js:27
[blog]/[async]/internal/map.js:27:9
- eachOfLimit.js:66 replenish
[blog]/[async]/internal/eachOfLimit.js:66:17
- eachOfLimit.js:50 iterateeCallback
[blog]/[async]/internal/eachOfLimit.js:50:17
- onlyOnce.js:12 module.exports
[blog]/[async]/internal/onlyOnce.js:12:16
- map.js:29
[blog]/[async]/internal/map.js:29:13
- util.js:16 tryCatcher
[blog]/[bluebird]/js/release/util.js:16:23
- nodeify.js:23 Promise.successAdapter
[blog]/[bluebird]/js/release/nodeify.js:23:30
- promise.js:566 Promise.module.exports.Promise._settlePromise
[blog]/[bluebird]/js/release/promise.js:566:21
- promise.js:606 Promise.module.exports.Promise._settlePromiseCtx
[blog]/[bluebird]/js/release/promise.js:606:10
Waiting for the debugger to disconnect...
Process finished with exit code 130 (interrupted by signal 2: SIGINT)
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрд╛рдо рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ ( @see https://github.com/gatsbyjs/gatsby/issues/7599)
рд╣рд╛рдп рдбреЗрд╡рд┐рдб (@comxd), рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВ рдпрд╛рддреНрд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕рдореЗрдВ рдореЗрд░реА рдХреЛрдИ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЕрд╢рдХреНрдд рдкрд░ рд╕рдВрдХрд▓рдХ рдЯрд┐рдкреНрдкрдгреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИред
рдЖрдк рдЕрдкрдиреА gatsby-node.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣ рдХреБрдЫ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдпрд╛ рдЦрд░рд╛рдм рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕ рдореЗрдВ рдХреБрдЫ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрдХ рдкреИрдЯрд░реНрди рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдЫ рдЦрд╛рд▓реА рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рд░реНрдХрдбрд╛рдЙрди рдШрдЯрдХ рдХреА рддрд░рд╣ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд╣реАрдВ рднреА рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЛ HTML рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
import React from 'react'
import PropTypes from 'prop-types'
import showdown from 'showdown'
const converter = new showdown.Converter()
const MarkdownContent = ({ content, className }) => (
<div className={className} dangerouslySetInnerHTML={{ __html: converter.makeHtml(content) }} />
)
MarkdownContent.propTypes = {
content: PropTypes.string,
className: PropTypes.string,
}
export default MarkdownContent
@blakenoll рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реИ! рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред
рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЧреИрдЯреНрд╕рдмреА рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрдм рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдкрд╛рд░реНрд╕рд░ рдХреА рдЦрд░реАрджрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!
@DSchau рдорд╛рд░реНрдХрдбрд╛рдЙрди рдкрд╛рд░реНрд╕рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдк-рд╣рд╛рдЗрдбреНрд░реЗрдЯреЗрдб рд╣реЛрдиреЗ рдкрд░ рдиреАрдЪреЗ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛?
@blakenoll рд╕реЛрдЪ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛ рдкреНрдпрд╛рд░!
рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдЯрд┐рдкреНрдкрдгреА рдкреНрд▓рдЧрдЗрдиреНрд╕ / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ gatsby-config.js
рднреАрддрд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреА рдЧрдИ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, Gatsby рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред ? рдпрд╣ рдиреЛрдб рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдмреЛрдЭрд┐рд▓ рдЬрдм рдЖрдк рдиреЗрд╕реНрдЯреЗрдб, рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╕рд╛рдордЧреНрд░реА рдХреА рднрд┐рдиреНрдирддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред
@blakenoll рдЕрдкрдиреЗ рддрд╕рд▓реАрдо рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рд╕реБрдкрд░ рдорджрджрдЧрд╛рд░ рд╣реИ рдФрд░ рдореБрдЭреЗ рдлреНрд░рдВрдЯрдореИрдЯрд░ рдореЗрдВ HTML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрджреНрджрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреЗрдЬ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ markdownParser рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдкрдиреА рдЧреНрд░рд╛рдлрдХрд▓рд╛рдЗрди рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдЧреНрд░ рднрд╛рдЧ (рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЗ рднреАрддрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлреНрд░рдВрдЯрдореИрдЯрд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ HTML рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛? рд░реЗрдЦрд╛рдВрдХрди рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ ... рд╕рд┐рд░реНрдл рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИ IMO b / c рдЕрдЧрд░ рдХреЛрдИ рдиреЗрдЯреНрд╕реАрд▓реА рд╕реАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде Gatsby рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ Netifly рд╡рд┐рднрд┐рдиреНрди рдлреНрд░рдВрдЯрдореАрдЯрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЛ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЙрди рдлрд╝реАрд▓реНрдб рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ HTML рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред @amitjindal рдФрд░ @blakenoll рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ @DSchau рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП
@skylarweaver рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд╛рдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реВрдВред рдЬрдм рдореИрдВ рдПрдХ рдиреЛрдб рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рд░реНрд╕ рд╣реЛ рд╕рдХрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕реАрдПрдордПрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдФрд░ рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ; рдЙрд╕ рд╕рдордп рдХрд┐рд╕реА рднреА / рд╕рднреА рдЧреИрдЯреНрд╕рдмреА рд░реАрдорд╛рд░реНрдХ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ред
+1 рдХреНрдпрд╛ @skylarweaver рдиреЗ рдХрд╣рд╛!
@amitjindal рд╢рд╛рдпрдж рдмреЗрд╡рдХреВрдл рд╕рд╡рд╛рд▓ рд╣реИ рд▓реЗрдХрд┐рди "> -" рднреА рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? Netlify cms рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЙрддреНрдкрдиреНрди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдореЗрд░реЗ рдкрд╛рд╕>>,> -;, рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
@ nol13 рдмреНрд▓реЙрдХ рд╕реНрдХреЗрд▓рд░ рджреЗрдЦреЗрдВ, рдпрд╣ рдирдИ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдореИрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреИрд╕реЗ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛
content: |
| | | | | |
|---|---|---|---|---|
| | | | | |
| | | | | |
| | | | | |
@ qnguyen12 рдореИрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://jmalarcon.github.io/markdowntables/ рдЬреИрд╕реЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ ред
рд╣рд╛рдВ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛ рдирд╣реАрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
text: |
test
### This is the actual content in **MarkDown** format.
|Month|Savings|Spending|
|--- |--- |--- |
|January|$100|$900|
|July|$750|$1000|
|December|$250|$300|
|April|$400|$700|
рдпрд╣ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
рдкрд░реАрдХреНрд╖рд╛
| рдорд╣реАрдирд╛ | рдмрдЪрдд | рдЦрд░реНрдЪ | | --- | --- | --- | | рдЬрдирд╡рд░реА | $ 100 | $ 900 | | рдЬреБрд▓рд╛рдИ | $ 750 | $ 1000 | | рджрд┐рд╕рдВрдмрд░ | $ 250 | $ 300 | | рдЕрдкреНрд░реИрд▓ | $ 400 | $ 700 |
@KyleAMathews рдзрдиреНрдпрд╡рд╛рдж, рдЙрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рдо, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЯрд┐рдкреНрдкрдгреА рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВред рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлреНрд░рдВрдЯрдореИрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛? рд╢рд╛рдпрдж рдПрдХ frontmattermd
рдХрдЪреНрдЪреЗ рдХреЗ рд╕рд╛рде рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ frontmatter
?
@ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдкреНрд▓рдЧрдЗрди рд╣реЛрдЧрд╛!
рдореИрдВрдиреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рдЬреЛ рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЧреИрдЯреНрд╕рдмреА-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдХрдореЗрдВрдЯ-рдлреНрд░рдВрдЯрдореИрдЯрд░ ред рдпрд╣ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдЖрдк рд▓реЛрдЧ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЧрд▓рдд рджрд┐рдЦрддрд╛ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реА рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ gatsby рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦрди рд╣реИред рдпрд╣ рдорд╛рд░реНрдЧ @omid рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ frontmattermd
рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gatsby- рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдирдП рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлрд╝рд╛рдЗрд▓ рдиреЛрдбреНрд╕ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдХреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЧреИрдЯреНрд╕рдмреА-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА рдХреЗ setFieldsGraphQLNodeType рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдПрдХ рдФрд░ рд░рд┐рд╡рд╛рд▓реНрд╡рд░ рдХреЗ рднреАрддрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдиреЛрдбред рдпрд╣ рдорд╛рд░реНрдХрдбрд╛рдЙрдирдорд╛рд░реНрдХ рдиреЛрдб рдкрд░ рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдлрд╝реАрд▓реНрдб рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдореВрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдХ рдХреА рддрд░рд╣ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯреАрд░рд┐рдЯреА рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрд╛ рд╣реИред
рд╣рд╛рдп @WhiteAbeLincoln рдореИрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:
npm i gatsby-transformer-remark-frontmatter
npm ERR! code ENOVERSIONS
npm ERR! No valid versions available for gatsby-transformer-remark-frontmatter
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдЕрднреА рддрдХ npm рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдПрдХ рдмрд╛рд░ рдХрд╛рдо рд╕реЗ рд╣рдЯрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред
- рдЕрдмреЗ рд╕рдлреЗрдж
17 рдЬреВрди 2019 рдХреЛ, 22:53 рдмрдЬреЗ, broeker рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рд╣рд╛рдп @WhiteAbeLincoln рдореИрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:
npm i gatsby- рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА-рдлреНрд░рдВрдЯ-рдлреНрд░рдВрдЯ npm ERR! рдХреЛрдб рдПрдирд╡реАрдЖрд░ рдИрдЖрд░рдЖрд░! Gatsby- рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА-рдлреНрд░рдВрдЯрдореИрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
@HiteAbeLincoln рдореИрдВрдиреЗ рдЧреИрдЯреНрд╕рдмреА-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдЯрд┐рдкреНрдкрдгреА-рдлреНрд░рдВрдЯрдореЗрдЯрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рджреАред
рддреНрд░реБрдЯрд┐ # 11325
рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЗ "gatsby-node.js" рдиреЗ рдПрдХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рдмрдирд╛рдпрд╛ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ?
рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд░реЗрдкреЛ рдХреЗ рдЗрд╢реНрдпреВ рд▓реЙрдЧ рдкрд░ @obeid рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рддреЛ рдХреБрдЫ рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреАред
@Nshki рдЙрддреНрддрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдФрд░ рдиреЛрдб рдХреЗ рдореНрдпреВрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @pieh рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде
const remark = require("remark");
const remarkHTML = require("remark-html");
exports.onCreateNode = ({ node, actions: { createNodeField } }) => {
const my_field = node.frontmatter.my_field;
if (my_field) {
const value = remark()
.use(remarkHTML)
.processSync(my_field)
.toString();
// new node at:
// fields {
// my_field_html
// }
createNodeField({
name: `my_field_html`,
node,
value
});
}
};
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: my_field
=> my_field_html
@aziaziazi рдореИрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рд╕рд░рдгреА рдореЗрдВ рдШреЛрдВрд╕рд▓реЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП?
---
pressEventsList:
- body: >-
*My md content...*
image: 'https://res.cloudinary.com/press/01.jpg'
- body: >-
*My md content...*
image: 'https://res.cloudinary.com/press/02.jpg'
---
рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ pressEventsList[i].body
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
@alexeychikk рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ pressEventList
рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const remark = require("remark");
const remarkHTML = require("remark-html");
exports.onCreateNode = ({ node, actions: { createNodeField } }) => {
const pressEventList = node.frontmatter.pressEventList;
if (pressEventList) {
const value = pressEventList.map(event =>
remark()
.use(remarkHTML)
.processSync(event.body)
.toString()
)
createNodeField({
name: `pressEventList`,
node,
value
});
}
};
рдореИрдВ createNodeField
(рдЙрд╕реА рддрд░рд╣ рддреЗрдЬ рдкрд╛рд░реНрд╕ рдЗрдореЗрдЬ URL) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдКрдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо YAML рдЯреИрдЧ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдЙрд╕ рдХреЛрдб рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЫрд╡рд┐ URL рдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рддреЗрдЬ рд╣реИ?
ЁЯСЛ MDX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ frontmatter рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ https://www.gatsbyjs.org/packages/gatsby-plugin-mdx-frontmatter/
@zslabs , рдпрд╣ рдЕрдХреНрд╕рд░ рдЖрдк рдПрдХ рд╕рдорд╛рдзрд╛рди "9 рдШрдВрдЯреЗ рдкрд╣рд▓реЗ" рдкреЛрд╕реНрдЯ рджреЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ! рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕реНрдкрд┐рди рджреЗ рджреВрдБрдЧрд╛! рдЕрдЪреНрдЫрд╛ рдХрд╛рдоред
рдЬрдм рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рддрдм рд╕реЗ рдореИрдВ рдЗрд╕рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВред
рдлреНрд░рдВрдЯрдореИрдЯрд░ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЦрдВрдб рдереЗ, рдЬреИрд╕реЗ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдЬреИрд╕реЗ рд╢реАрд░реНрд╖рдХ рдФрд░ рдЪрд┐рддреНрд░рд┐рдд рдЫрд╡рд┐, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╢рд░реАрд░ рдерд╛, рдЬреЛ рдорд╛рд░реНрдХрд╛рдбрд╛рдЙрди рд╕реЗ рдмрдирд╛ рдерд╛ред
CreateNodeField рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдереА рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдореМрдЬреВрджрд╛ рдлреНрд░рдВрдЯрдореИрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реИрдВред
рдореИрдВрдиреЗ createFieldExtension рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рдЬрдм рдореЗрд░рд╛ рдЕрдиреБрднрд╛рдЧред рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдордЭрд╛ рдЬрд╛рдП, рддреЛ рд╡рд╣ HTML рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПред
рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдореБрдЭреЗ рд╕рд╣реА рдХрд┐рдпрд╛ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрдиреЗ рдХрд╛ рдЧрд▓рдд рддрд░реАрдХрд╛ рд╣реИред
рдореЗрд░реА рд╕реАрдорд╛ рд░реЗрдЦрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
templateKey: project-entry
date: 2020-06-22T13:16:57.702Z
featuredproject: true
title: Project title
description: Description for listing the project on other pages
featuredimage: Image for listing the project on other pages
featuredpost: false
sections:
- heading: Section heading
standout: false
intro: >-
Introduction to be displayed separately to body
body: >-
## section title
* bullet point
* bullet point
Some other text here
рдФрд░ рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдореИрдВрдиреЗ gatsby-node.js рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ
exports.createSchemaCustomization = ({actions}) => {
const { createTypes, createFieldExtension} = actions
createFieldExtension({
name: 'toHTML',
extend:() => ({
resolve(source) {
return remark().use(remarkHTML).processSync(source.body).toString()
}
})
})
const typeDefs = `
type MarkdownRemark implements Node {
frontmatter: Frontmatter
}
type Frontmatter <strong i="14">@infer</strong> {
sections: [section]
}
type section <strong i="15">@infer</strong> {
body: String <strong i="16">@toHTML</strong>
}
`
createTypes(typeDefs)
}
рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореЗрд░реА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо YAML рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:
---
title: My Page
inline: !md Some **bold** and _italic_ text
block: !md |
## I'm a H2 title
[I'm an inline-style link](https://www.google.com)
---
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдЧреНрд░реЗ-рдореИрдЯрд░ рдХреЗ YAML рдкрд╛рд░реНрд╕рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:
// custom-yaml.js
const yaml = require('js-yaml')
const remark = require('remark')
const remarkHTML = require('remark-html')
const MarkdownYamlType = new yaml.Type('!md', {
kind: 'scalar',
construct: data => remark().use(remarkHTML).processSync(data).toString(),
})
const MARKDOWN_SCHEMA = yaml.Schema.create(MarkdownYamlType)
module.exports = doc => yaml.safeLoad(doc, { schema: MARKDOWN_SCHEMA })
// gatsby-config.js
module.exports = {
plugins: [
{
resolve: `gatsby-transformer-remark`,
options: {
engines: { yaml: require("path/to/custom-yaml.js") },
},
}
]
}
рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣рд▓ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ @md рдирд╛рдо рд╕реЗ рдПрдХ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
exports.createSchemaCustomization = ({ actions }) => {
actions.createFieldExtension({
name: "md",
args: {
from: {
type: "String!",
defaultValue: true,
},
},
extend() {
return {
args: {
from: "String!",
},
resolve(source, args) {
const fieldValue = source[args.from]
return convertToHTML(fieldValue)
},
}
},
})
const typeDefs = `
type MarkdownRemark implements Node <strong i="7">@infer</strong> {
frontmatter: Frontmatter
}
type Frontmatter {
markdownField: String! <strong i="8">@md</strong>
}
`
actions.createTypes(typeDefs)
}
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
...
frontmatter {
title: markdownField(from: "title")
subtitle: markdownField(from: "subtitle")
}
рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣рд▓ рдХрд┐рдпрд╛ред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЦрд╛рд░рд┐рдЬ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ defaultValue: true
рддрд░реНрдХ рдХреЗ рд▓рд┐рдП from
рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП -ред defaultValue: ''
рдмрджрд▓рдиреЗ рд╕реЗ, рдореБрдЭреЗ рддрдм рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
Encountered an error parsing the provided GraphQL type definitions:
Argument "from" of required type "String!" was not provided.
1 |
2 | type MarkdownRemark implements Node <strong i="11">@infer</strong> {
3 | frontmatter: Frontmatter
4 | }
5 | type Frontmatter {
> 6 | markdownField: String! <strong i="12">@md</strong>
| ^
7 | }
рдпрд╣ рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рд╣реИред
рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореЗрд░реА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо YAML рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:
--- title: My Page inline: !md Some **bold** and _italic_ text block: !md | ## I'm a H2 title [I'm an inline-style link](https://www.google.com) ---
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдЧреНрд░реЗ-рдореИрдЯрд░ рдХреЗ YAML рдкрд╛рд░реНрд╕рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:
// custom-yaml.js const yaml = require('js-yaml') const remark = require('remark') const remarkHTML = require('remark-html') const MarkdownYamlType = new yaml.Type('!md', { kind: 'scalar', construct: data => remark().use(remarkHTML).processSync(data).toString(), }) const MARKDOWN_SCHEMA = yaml.Schema.create(MarkdownYamlType) module.exports = doc => yaml.safeLoad(doc, { schema: MARKDOWN_SCHEMA })
// gatsby-config.js module.exports = { plugins: [ { resolve: `gatsby-transformer-remark`, options: { engines: { yaml: require("path/to/custom-yaml.js") }, }, } ] }
рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдЧреИрдЯреНрд╕рдмреА-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░-рдХрдореЗрдВрдЯ" рдХреЗ рд▓рд┐рдП 'рдЕрдорд╛рдиреНрдп рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд▓реНрдк' рдорд┐рд▓рддреЗ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рд░реНрдХрдбрд╛рдЙрди рдШрдЯрдХ рдХреА рддрд░рд╣ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд╣реАрдВ рднреА рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХреЛ HTML рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ