gatsby.js-高级入门-实现2个网址前缀(网站的2个不同部分)?

时间:2018-09-26 23:45:19

标签: graphql gatsby

好像您将jsx文件放在大多数gatsby入门程序的'pages'文件夹中一样,URL遵循开箱即用的目录结构,因此您可以实现所需的任何URL(http://blah.com/ < strong> foo / post1,http://blah.com/ bar / post2),只需在源代码树(pages/foo/post.jsxpages/bar/post2.jsx)中嵌套文件夹即可。

问题

我使用了 gatsby高级入门https://github.com/Vagr9K/gatsby-advanced-starter)。它将所有内容文件都不放在pages/中,而是放在顶级content/文件夹中,即使创建了{{1之后,我也无法弄清楚复制foo / xxx,bar / xxx url的方式}},content/foo/post1.md个文件夹。

确实有一个siteconfig.js,它设置了一个路径前缀,但是我想为该网站的2个不同部分设置两个不同的前缀,所以我只设置了现在将其设置为“ /”(构建似乎忽略了我为此配置参数设置的任何值,所以……耸了耸肩)。

我尝试过的

  • 我尝试将content/bar/post2.md添加到.md文件的开头,并将其设置为父文件夹名称。完全忽略了这一点(无论如何,我都不是我想要的……我想将生成的段保留为URL的一部分。)
  • 为每个子文件夹分别使用path,希望它可以更改graphql图以识别2个单独的数据源,但是没有区别。

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

  

好像您将jsx文件放在大多数gatsby启动程序的'pages'文件夹中一样,URL遵循开箱即用的目录结构[...]

这不是盖茨比首发特定的,这是盖茨比的默认行为。 src/pages中的每个js / jsx文件都将是一个页面。

  

但在顶级content/文件夹中

对于常规页面,它仍然具有src/pages文件夹。但是content文件夹中保存的文件将被src/templates中的gatsby-node.js转换为页面。或换句话说:content文件夹的内容是通过gatsby-node.js中定义的模板(且模板位于src/templates中)以编程方式创建的。


此处的createPage函数中定义了路径/ URL get:gatsby-nodeL144。该行引用edge.node.fields.slug,该slughere上方的GraphQL中被查询。该字段将添加到onCreateNode函数中。更具体地说,onCreateNodeField函数中的slug字段。在那里,您看到它通过了上面定义的src/content


blog文件夹中创建两个文件夹,例如projectsgatsby-config.js。确保在{ resolve: 'gatsby-source-filesystem', options: { name: 'blog', path: `${__dirname}/content/blog`, }, }, { resolve: 'gatsby-source-filesystem', options: { name: 'projects', path: `${__dirname}/content/projects`, }, }, 中都定义了它们:

gatsby-node.js

fileNode定义后的const pathPrefix = fileNode.sourceInstanceName 中添加以下行:

sourceInstanceName

name是我们在gatsby-config条目中定义为createNodeField({ node, name: "slug", value: `/${pathPrefix}${slug}` }); createNodeField({ node, name: 'sourceInstanceName', value: pathPrefix }); 的东西。

然后,您可以将line更改为:

export const pageQuery = graphql`
  query BlogQuery {
    allMarkdownRemark(filter: { fields: { sourceInstanceName: { eq: "blog } } }
    ) {
        edges {
          node {
            ... etc
          }
        }
      }
  }
`

如果您只想查询两个文件夹之一,则第二行很有用,例如:

rrdtool create CPU.rrd --start $Date \
   DS:CPU_ALL:GAUGE:600:U:U \
   DS:User:GAUGE:600:U:U \
   DS:Sys:GAUGE:600:U:U \
   DS:Wait:GAUGE:600:U:U \
   DS:Idle:GAUGE:600:U:U \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000 \
   RRA:AVERAGE:0.5:1:20000