javascript - 如何在 gatsby 中获取 markdown 文件的目录名称?
问题描述
我有一个帖子目录,例如:
src
-posts
-post-a
index.md
demo.jpg
-post-b
index.md
logo.jpg
-pages
index.js
// ...
我想让目录名 post-a/post-b 作为 index.md 的 id,我该怎么办?
这是我的gatsby-config.js
:
module.exports = {
plugins: [
{
resolve: 'gatsby-source-filesystem',
options: {
name: 'posts',
path: `${__dirname}/src/posts`,
},
},
{
resolve: 'gatsby-transformer-remark',
options: {
commonmark: true,
footnotes: true,
pedantic: true,
gfm: true,
plugins: [],
},
},
'gatsby-transformer-sharp',
'gatsby-plugin-sharp',
'gatsby-plugin-react-helmet',
],
};
但allMarkdownRemark.edges.node
没有目录信息。
解决方案
您可以使用createFilePath
函数 fromgatsby-source-filesystem
来构建您的 slug 并markdownRemark.fields
使用onCreateNode
API 将其添加到其中。官方博客启动器也这样做:https ://github.com/gatsbyjs/gatsby-starter-blog/blob/04ace724603b46198665e052006031ba7e644f9d/gatsby-node.js#L53-L64
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions
if (node.internal.type === `MarkdownRemark`) {
const value = createFilePath({ node, getNode })
createNodeField({
name: `slug`,
node,
value,
})
}
}
slug 现在包含您的博客文章的目录名称。
你原来的问题:
您可以使用联合类型来访问父级,例如:
{
allMarkdownRemark {
nodes {
parent {
... on File {
dir
}
}
}
}
}
推荐阅读
- git - How do I close a branch i accidentally reopened?
- python - How to create a word docx using python docx in other than english?
- apache-nifi - Apache NiFi 和容错
- react-apollo - 没有 React 的 Apollo 突变
零件 - assembly - 字符读取在图形模式下不起作用
- python - 如何使用另一个字符串对一个字符串进行排序
- python - Python 中的 Rijndael 填充
- python - 如何从python中的字体文件中获取字体名称(标题)
- xml - XSLT 拆分一个以逗号分隔的长字符串值
- node.js - mocha 和 chai 超过 2000 毫秒的单元测试错误。用于异步测试和钩子