Gatsby: 開発と本番での異なるGraphQLクエリ

作成日 2019年03月10日  ·  1コメント  ·  ソース: gatsbyjs/gatsby

サイトが開発モードで実行されているか本番モードで実行されているかに応じて、ページコンポーネントのGraphQLクエリを変更する方法はありますか?

question or discussion

最も参考になるコメント

クエリテキストを直接操作することはできませんが、devモードかprodモードかに応じて異なるコンテキストを渡すことができます。

これがhttps://github.com/gatsbyjs/gatsby/issues/10844#issuecomment-471349943で説明されている問題を参照している場合

プログラムでブログリストを作成するので、 contextを渡してクエリを実行できます

createPage({
  path: "/blog",
  template: <some_template>,
  context: {
    draftBlacklist: process.env.NODE_ENV === `production` ? [true] : []
  }
})

そしてクエリで:

query BlogListing($draftBlacklist: [String!]!) {
  allMarkdownRemark(filter: {frontmatter: {draft: {nin: $draftBlacklist}}}) {
    edges {
      node {
        frontmatter {
          title
          draft
        }
      }
    }
  }

これにより、開発中のすべてのノードが表示され、本番環境でdrafttrueに設定されているすべてのノードが除外されます。 キャッシュの問題がある可能性があります(開発後にビルドを実行した場合、クエリatmは再実行されません)。 ただし、本番ビルドにnetlify (または他の種類のCI / CD)を使用する場合、これは機能するはずです。

>すべてのコメント

クエリテキストを直接操作することはできませんが、devモードかprodモードかに応じて異なるコンテキストを渡すことができます。

これがhttps://github.com/gatsbyjs/gatsby/issues/10844#issuecomment-471349943で説明されている問題を参照している場合

プログラムでブログリストを作成するので、 contextを渡してクエリを実行できます

createPage({
  path: "/blog",
  template: <some_template>,
  context: {
    draftBlacklist: process.env.NODE_ENV === `production` ? [true] : []
  }
})

そしてクエリで:

query BlogListing($draftBlacklist: [String!]!) {
  allMarkdownRemark(filter: {frontmatter: {draft: {nin: $draftBlacklist}}}) {
    edges {
      node {
        frontmatter {
          title
          draft
        }
      }
    }
  }

これにより、開発中のすべてのノードが表示され、本番環境でdrafttrueに設定されているすべてのノードが除外されます。 キャッシュの問題がある可能性があります(開発後にビルドを実行した場合、クエリatmは再実行されません)。 ただし、本番ビルドにnetlify (または他の種類のCI / CD)を使用する場合、これは機能するはずです。

このページは役に立ちましたか?
0 / 5 - 0 評価