Gatsby: ajuda a tornar os arquivos yaml mais poderosos

Criado em 6 nov. 2017  ·  3Comentários  ·  Fonte: gatsbyjs/gatsby

Olá a todos, posso obter ajuda para escrever markdown numa página yaml? Estou tentando mudar de jekyll para gatsby, mas uma das características interessantes de jekyll era a linguagem de modelagem líquida, que permitia passar qualquer string (de um arquivo yaml, por exemplo) por um tubo markdownify . Isso foi útil quando eu tinha várias informações que queria estruturadas na página, mas organizadas em um arquivo yaml. Exemplo:

- 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 ...

Em uma nota semelhante, carregar uma imagem dessa maneira parece não ser possível, eu tenho soluções hacky para isso, como importar todas as imagens para outro lugar no arquivo, mas há uma maneira de informar o webpack para copiar quaisquer imagens no pages/ pasta mesmo que eles 'pareçam' não estar sendo usados?

Comentários muito úteis

Nas imagens, se você usar gatsby-source-filesystem + gatsby-transformer-yaml + gatsby-transformer-sharp / gatsby-plugin-sharp, poderá consultar essas imagens.

Veja, por exemplo, como gatsbyjs.org consulta avatares de autor

https://github.com/gatsbyjs/gatsby/blob/master/www/src/templates/template-blog-post.js#L306 & https://github.com/gatsbyjs/gatsby/blob/master/docs/ blog / author.yaml

Ao executar campos yaml por meio de markdown - você pode criar subnós que especificam seu tipo de mídia como markdown e, em seguida, gatsby-transformer -note irá convertê-los em html, por exemplo, https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e160cb0b84fages5e2a/pack /gatsby-source-contentful/src/normalize.js#L143

Desculpe se isso é de alto nível e não muito acionável. Gatsby está focado em facilitar a configuração de pipelines de transformação de dados personalizados. Para tarefas comuns, as pessoas podem criar plug-ins de nível superior que configuram coisas assim para você automaticamente, mas não sei se alguém ainda fez para yaml => markdown => html.

Para que isso aconteça, você precisará mergulhar nos documentos de Gatsby e examinar os plug-ins para entender como fazer o que deseja.

Todos 3 comentários

Nas imagens, se você usar gatsby-source-filesystem + gatsby-transformer-yaml + gatsby-transformer-sharp / gatsby-plugin-sharp, poderá consultar essas imagens.

Veja, por exemplo, como gatsbyjs.org consulta avatares de autor

https://github.com/gatsbyjs/gatsby/blob/master/www/src/templates/template-blog-post.js#L306 & https://github.com/gatsbyjs/gatsby/blob/master/docs/ blog / author.yaml

Ao executar campos yaml por meio de markdown - você pode criar subnós que especificam seu tipo de mídia como markdown e, em seguida, gatsby-transformer -note irá convertê-los em html, por exemplo, https://github.com/gatsbyjs/gatsby/blob/d855150dadb91e80b836d2bd5e160cb0b84fages5e2a/pack /gatsby-source-contentful/src/normalize.js#L143

Desculpe se isso é de alto nível e não muito acionável. Gatsby está focado em facilitar a configuração de pipelines de transformação de dados personalizados. Para tarefas comuns, as pessoas podem criar plug-ins de nível superior que configuram coisas assim para você automaticamente, mas não sei se alguém ainda fez para yaml => markdown => html.

Para que isso aconteça, você precisará mergulhar nos documentos de Gatsby e examinar os plug-ins para entender como fazer o que deseja.

obrigado pelo conselho, não acho que estou pronto para dedicar tanto tempo essencialmente para fazer um plugin gatsby agora. Eu tenho minha solução ingênua como esta:

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)
}))

isso ainda pode acontecer durante o estágio de construção, portanto, funciona para meus propósitos. Acho que o problema é que o graphql tem como objetivo primeiro construir dados e usar um modelo semelhante para várias páginas. Estou seguindo uma estrutura de 'módulo' assim:
`` `
Páginas/
uma página/
index.js
_data.yml
ativos/
img1.png
outra página/
...

Uma maneira simples de fazer isso seria compilar os campos de redução usando onCreateNode. https://www.gatsbyjs.org/tutorial/part-four/#programmatically -creating-pages-from-data e adicione o campo compilado como um novo campo com createNodeField .

Você apenas faria isso em seu gatsby-node.js

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

benstr picture benstr  ·  3Comentários

jimfilippou picture jimfilippou  ·  3Comentários

jaanhio picture jaanhio  ·  3Comentários

3CordGuy picture 3CordGuy  ·  3Comentários

mikestopcontinues picture mikestopcontinues  ·  3Comentários