Gatsby: помочь сделать файлы yaml более мощными

Созданный на 6 нояб. 2017  ·  3Комментарии  ·  Источник: gatsbyjs/gatsby

Привет всем, могу ли я получить помощь в написании разметки на странице yaml? Я пытаюсь переключиться с jekyll на gatsby, но одной из приятных особенностей jekyll был жидкий язык шаблонов, который позволял передавать любую строку (например, из файла yaml) через канал markdownify . Это было полезно, когда у меня было несколько фрагментов информации, которые я хотел структурировать на странице, но упорядочить вместе в файле 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 ...

Аналогичным образом, загрузка изображения таким способом кажется невозможной, у меня есть хакерские решения для этого, например, импорт всех изображений в другое место в файле, но есть ли способ сообщить webpack о копировании любых изображений в 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 через уценку - вы можете создать подузлы, для которых вы укажете их тип mediatype как уценку, а затем gatsby-transformer-comment преобразует их в html, например https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e160cb0b84fages /gatsby-source-contentful/src/normalize.js#L143

Извините, если это супер высокий уровень и не очень действенный. Гэтсби сосредоточен на том, чтобы упростить настройку пользовательских конвейеров преобразования данных. Для обычных задач люди могут создавать плагины более высокого уровня, которые автоматически настраивают такие вещи для вас, но я не знаю, есть ли у кого-нибудь еще для yaml => markdown => html.

Чтобы это произошло, вам нужно погрузиться в документацию Гэтсби и посмотреть плагины, чтобы понять, как делать то, что вы хотите делать.

Все 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 через уценку - вы можете создать подузлы, для которых вы укажете их тип mediatype как уценку, а затем gatsby-transformer-comment преобразует их в html, например https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e160cb0b84fages /gatsby-source-contentful/src/normalize.js#L143

Извините, если это супер высокий уровень и не очень действенный. Гэтсби сосредоточен на том, чтобы упростить настройку пользовательских конвейеров преобразования данных. Для обычных задач люди могут создавать плагины более высокого уровня, которые автоматически настраивают такие вещи для вас, но я не знаю, есть ли у кого-нибудь еще для yaml => markdown => 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)
}))

это все еще может произойти на этапе сборки, поэтому это работает для моих целей. Я думаю, проблема в том, что graphql нацелен на создание данных в первую очередь и использование аналогичного шаблона для нескольких страниц. Я следую такой структуре «модуля»:
`` ''
страницы /
одна страница/
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 рейтинги

Смежные вопросы

benstr picture benstr  ·  3Комментарии

rossPatton picture rossPatton  ·  3Комментарии

theduke picture theduke  ·  3Комментарии

magicly picture magicly  ·  3Комментарии

KyleAMathews picture KyleAMathews  ·  3Комментарии