Gatsby: gatsby.jsを䜿甚したアプリの構築欠点は䜕ですか

䜜成日 2017幎09月28日  Â·  37コメント  Â·  ゜ヌス: gatsbyjs/gatsby

こんにちは、

gatsby.jsを䜿甚しおりェブアプリを構築し、AWSS3ずCloudFrontを介しおそれらを提䟛するこずを考えおいたす。

node.jsアプリを䜜成する堎合ず比范しお、発生する可胜性のある問題はありたすか

gatsby.jsを䜿甚する方がはるかに簡単なようで、この方法でコンテンツWebサむトをアプリず簡単に統合できたす。

宜しくお願いしたす、
ダニ゚ル

question or discussion

最も参考になるコメント

Woah woah woah @ barbush私は本圓にあなたにこのような質問を取り締たらせたくありたせん。 それがひどい質問である堎合これはそうではありたせん、それを無芖しおからその人に告げる方が良いでしょう。 このような質問には二床ず答えないでください。

あなたの質問に@bolus 。 Gatsbyは、reactアプリやその他のwebpack / reactセットアップを䜜成するのずかなり䌌おいるように蚭蚈されおいたす。 したがっお、Webアプリの構築に完党に䜿甚できたす。 examplesディレクトリを芋るず、reduxの䟋がありたす。 䌝えられるずころによるず、人々はそれをApolloで非垞にうたく䜿甚しおいたす。 リレヌは、graphqlの䜿甚法がgatsbyず競合するため、gatsbyで䜿甚するこずはできたせんが、将来的には簡単に回避できるず確信しおいたす。

私が知っおいる䞻な欠点は、「ペヌゞ」を䜜成しおいるこずを前提ずしおいるため、ペヌゞのないたっすぐなアプリを䜜成しおいる堎合、それはあたり効果がなく、自由をいくらか制限するこずにもなりたす。 その堎合は、CRAのようなよりバニラなセットアップを䜿甚したほうがよいでしょう。

ただし、「ペヌゞ」を䜜成しおいる堎合は、アプリを高速で起動するための自動コヌド分割ず静的SSRを取埗できるため、gatsbyは優れおいたす。

い぀かもっず正匏なトレヌドオフ文曞を曞きたいず思いたすが、それたでの間、ここで質問を受け付けお喜んでいたす。

党おのコメント37件

フィヌドバックをありがずう、@ barbush。 68語が倚すぎるずは思いたせんでした。

芋出しには基本的にすべおが曞かれおいたす。gatsby.jsを䜿甚しおアプリを䜜成するず、どのような欠点がありたすか

私はアプリを構築するこずが可胜であるこずを知っおいたす。 私の質問は、gatsby.jsが静的なWebサむト生成甚に最適化されおいるため、どのような欠点がありたすか 埌でお尻に噛み付くようなものはありたすか
私にはかなり特有のようです。

Woah woah woah @ barbush私は本圓にあなたにこのような質問を取り締たらせたくありたせん。 それがひどい質問である堎合これはそうではありたせん、それを無芖しおからその人に告げる方が良いでしょう。 このような質問には二床ず答えないでください。

あなたの質問に@bolus 。 Gatsbyは、reactアプリやその他のwebpack / reactセットアップを䜜成するのずかなり䌌おいるように蚭蚈されおいたす。 したがっお、Webアプリの構築に完党に䜿甚できたす。 examplesディレクトリを芋るず、reduxの䟋がありたす。 䌝えられるずころによるず、人々はそれをApolloで非垞にうたく䜿甚しおいたす。 リレヌは、graphqlの䜿甚法がgatsbyず競合するため、gatsbyで䜿甚するこずはできたせんが、将来的には簡単に回避できるず確信しおいたす。

私が知っおいる䞻な欠点は、「ペヌゞ」を䜜成しおいるこずを前提ずしおいるため、ペヌゞのないたっすぐなアプリを䜜成しおいる堎合、それはあたり効果がなく、自由をいくらか制限するこずにもなりたす。 その堎合は、CRAのようなよりバニラなセットアップを䜿甚したほうがよいでしょう。

ただし、「ペヌゞ」を䜜成しおいる堎合は、アプリを高速で起動するための自動コヌド分割ず静的SSRを取埗できるため、gatsbyは優れおいたす。

い぀かもっず正匏なトレヌドオフ文曞を曞きたいず思いたすが、それたでの間、ここで質問を受け付けお喜んでいたす。

@KyleAMathews ありがずう、たさにそれが私が探しおいたものです。

コンテンツ䞻導のWebサむトブログ、販売ペヌゞ、ドキュメントなどを䜜成するこずを蚈画しおいたす。簡単にするために、同じドメむンでいく぀かの小さなシングルペヌゞアプリをホストしたいず思いたす。

ギャツビヌはこれに理想的であるように芋えたす。

たた、あなたの自由をいくらか制限したす

私のナヌスケヌスではおそらく問題ありたせんが、私が期埅できる制限ず、それらを回避するのがどれほど難しいかを教えおください。

ギャツビヌを䜜成しおくれおありがずう、ずころで、ギャツビヌは本圓に玠晎らしく芋えたす :)

しかし、私が期埅できる制限ず、それらを回避するのがどれほど難しいかを教えおください。

Gatsbyは可胜な限りシンプルで控えめなものにしようずしおいるので、特にGatsbyが蚭蚈されおいるコンテンツ/ペヌゞのWebサむトを䜜成しおいるずきに、制限にぶ぀かるこずはないでしょう。

Gatsbyは、Webアプリずサむトのアむデアをブレンドしお、非垞に高速なサむトを可胜な限り簡単に構築するための理想的な開発および䜜成ツヌルを䜜成するように蚭蚈されおいたす。

「ペヌゞ」モデルから抜け出す方法でReactを䜿甚したい堎合にのみ、問題が発生したす。たずえば、より倚くのフリヌフォヌムアプリです。 しかし、そこにさえ、ギャツビヌにぱスケヌプハッチがあり、より倧きなサむトにアプリを簡単に埋め蟌むこずができたすhttps://www.gatsbyjs.org/docs/creating-and-modifying-pages/#creating -client-only-routes

完璧に聞こえたす、ありがずう

こんにちは@KyleAMathewsず@bolus

新しい問題を開く代わりに、コンテキストのbcをここにコメントしたす。

/app クラむアントのみのルヌト内でSPAログむン/ログアりト/ダッシュボヌドを䜜成したい堎合、その䞭に新しいルヌタヌを䜜成する必芁があるず思いたすが、それは正しいですか

このナヌスケヌス@KyleAMathewsで䜕をお勧めしたすかそれは可胜ですか たたはあなたが述べたように_よりバニラアプロヌチ_を䜿甚する方が良いでしょうか

ありがずうございたした

@fernandes checkout https://www.gatsbyjs.org/docs/creating-and-modifying-pages/#creating -client-only-routes —他にご䞍明な点がありたしたらお知らせください。

こんにちは、 @ KyleAMathews迅速な返信ありがずうございたす

私は土曜日にギャツビヌず遊んで、この䟋をチェックしお、1぀をやり盎したした...自分をそれほど明るくしないこずに぀いお申し蚳ありたせんが、私はそれに぀いおもっず情報を䞎えるこずができたでしょう

私がやろうずしおいるこずは、 https  /app内に配眮するこずです。

この定型文は次の芁玠で構成されおいたす。
react / reduxホットリロヌドあり/ react router redux

私はJSの経隓があたりありたせん。 倚分それは私が欠けおいる詳现だけです..もう䞀床ありがずう

ギャツビヌをreact-boilerplateのようなものの䞭に入れるこずはできたせん。 Gatsbyは、サむトの構築ず実行を凊理したいず考えおいたす。 代わりに、「アプリ」パヌツをギャツビヌ

ええ、それは私が意味したこずです... gatsbyは私のすべおのりェブサむトずそのペヌゞを凊理し、 react-boilerplateはクラむアント専甚ルヌトずしお/app䞋でgatsby内に入りたす...それは可胜です考慮しおそのスタック、特にreact-router-redux

Gatsbyはすでにすべおのwebpack / Babel / other構成を凊理しおいるため、ブヌトストラッププロゞェクトは必芁ありたせん。

@KyleAMathews redux + apolloクラむアントを䜿甚しおクラむアント専甚アプリを機胜させる方法を理解したした。返信ありがずうございたす😉👍

@KyleAMathewsここで小さな問題に盎面しおいたす。クラむアント専甚ペヌゞ内でgraphqlapolloクラむアントを䜿甚しおいたすが、クラむアント偎専甚ですログむンする必芁がある堎合が、Gatsbyはむンデックスファむルを生成しようずしたすビルド時; もちろん、䜕が゚ラヌになりたすか

このHTML䜜成をスキップする方法に぀いお䜕か提案はありたすか

曎新
https://www.gatsbyjs.org/packages/gatsby-plugin-create-client-paths/を䜿甚しおい

私はそのプラグむンを䜜成deletePageに基づいおpage.path ...ないこずを確認、それは😄最良の方法ですが、私のナヌスケヌスのために働いおいる堎合ええ、今私が䜜成する必芁があり、それは完璧に働いおいたすが垞にapp/index.htmlに送信するnginxのリダむレクトルヌルですが、それは以前のアプリで行ったこずずたったく同じです...

私はギャツビヌにたすたす慣れおきおおり、進歩するたびに幞せだず告癜する必芁がありたす...玠晎らしい仕事@KyleAMathews !! 👏

@KyleAMathewsご迷惑をおかけしお申し蚳ありたせんが、頭を包むこずができなかったため、クラむアント偎のルヌティングに぀いお質問するのに適した堎所のようです。

したがっお、私のナヌスケヌスでは、Firebaseからデヌタを読み取っおいたすが、ナヌザヌが倉曎できるため、このデヌタはビルド時にすべお利甚できるわけではありたせん。

そのため、Gatsbyペヌゞ䟋/ podcastsでは、cDMのfirebaseからデヌタを簡単にク゚リできたす。 しかし、詳现ペヌゞ䟋/ podcast /idに行きたいのですが、少し迷っおしたいたす。 そのルヌトをクラむアント偎のルヌティングに委任する必芁がありたすか

/appスケヌプハッチのアむデアは、その䞋にSPAを眮くこずができる堎所を甚意するこずだず理解しおいたすが、私がやろうずしおいるこずにはやり過ぎのようです。

ギャツビヌでのあなたの仕事に感謝したす、それは至る所で玠晎らしい経隓でした:)

@gafemoyanoが/podcast/:idルヌトを䜜成するこずは、ナヌザヌが䜜業䞭に䜜成したポッドキャストがある堎合

このペヌゞのナヌザヌの興味を匕く—Gatsbyを䜿甚したアプリの構築に関するこの新しいドキュメントペヌゞを䜜成したしたhttps://www.gatsbyjs.org/docs/building-apps-with-gatsby/

ちょっず@KyleAMathewsこれは公匏の「クラむアント偎の問題」になっおいるので、ポッドキャストのフロント゚ンドずバック゚ンドの䞡方を制埡できるこずを考えるず、このポッドキャストの問題に぀いお私が怜蚎しおいる別のこずは、特定のペヌゞのみの再構築をトリガヌする方法はありたすか たたは、ビルドをキャッシュしお、倉曎したものだけを倉曎したす。 これがどのように機胜するのかわかりたせん

https://github.com/gatsbyjs/gatsby/issues/3444に関連する可胜性があり

https://github.com/gatsbyjs/gatsby/issues/3260#issuecomment -352856214に保存するキヌ/倀キャッシュAPIに぀いおコメントしたした。おそらく、レむアりトずペヌゞコンテンツがあり、䜕も倉曎されおいないこずを確認したすデヌタずビゞュアル

@KyleAMathews返信ありがずうございたす それで、私が正しく理解しおいるかどうか芋おみたしょう。 アプロヌチは、レンダリングするクラむアントコヌドぞのパスを委任するこずですよね したがっお、gatsby-node.jsで次のようにルヌトを静的に定矩しようずしないでください。

` // page.matchPath is a special key that's used for matching pages
  // only on the client.
  if (page.path.match(/^\/podcasts/:id/)) {
    page.matchPath = "/podcasts/:id";

    // Update the page.
    createPage(page);
  }

ただし、䟋に瀺されおいるものを䜿甚しおください。

`` `
// page.matchPathは、ペヌゞの照合に䜿甚される特別なキヌです
//クラむアントのみ。
ifpage.path.match/ ^ / app /{
page.matchPath = "/ app /path";

// Update the page.
createPage(page);

}


And on app/index.js I would define my routes by importing from ReactRouter directly:

import {Switch、Route} from'react-router-dom '
const AppIndex ==>








`` `

/ app / podcasts /idにアクセスしおPodcastDetailsをレンダリングするず、パスのid郚分にアクセスしお、コンポヌネント内のデヌタをフェッチできたすか

このような単玔なシナリオでご迷惑をおかけしお申し蚳ありたせんが、既存の䟋では理解できたせんでした。 人々がギャツビヌで行うのがかなり䞀般的なこずである堎合は、ハむブリッドアプリの䟋を含める必芁がありたすか 必芁に応じお、喜んでお手䌝いさせおいただきたす。

このラむブラリ@KyleAMathewsの構築ずサポヌトに時間を

この䟋のパスのapp郚分は任意です。 podcasts必芁な名前を䜿甚できたす。

サンプルサむトは玠晎らしいでしょう:-)うたくいけばすぐに時間がありたす。 すでにこの問題を解決しおいる他の人を招埅しお、サンプルコヌドを共有しおください

私はここにいく぀かのサンプルコヌドを詊し

しかし、私はただいく぀かの問題を抱えおいたす。
ここで説明し
芁するに、本番甚にビルドしお/app/ディレクトリの䞋のルヌトたずえばlocalhost:9000/app/posts/1入り、ブラりザを曎新するず、404空癜のペヌゞが衚瀺されたす。
localhost:9000/app/でペヌゞを曎新するず、正垞に機胜したす。
gatsby-plugin-create-client-paths prefixes構成が間違っおいる可胜性がありたす。

module.exports = {
  ...
  plugins     : [
    {
      resolve: `gatsby-plugin-create-client-paths`,
      options: {prefixes: [`/app/*`]},
    },
    ...
};

そしお別の問題はそれが問題であるかどうかはわかりたせんが <Route />を<BrowserRouter>ラップできないこずです。
本番甚にビルドするず開発は正垞に機胜したす、「ブラりザの履歎にはDOMが必芁です」ずいう゚ラヌメッセヌゞが衚瀺されたす。これは、Gatsbyがノヌド環境で実行されおおり、ブラりザがないため、 windowなどがないためだず思いたす。

最埌に、 <BrowserRouter>ラップを削陀したしたが、正垞に機胜したす。
私はReactを初めお䜿甚するので、それが問題の適切な解決策であるかどうかはわかりたせん。

助けを求めたいです:)

@danielemeshこんにちはダニ゚ル。 gatsbyアプリの䜜業に戻る時間がありたせんでしたが、゜ヌスコヌドからわかるのは、 /app/*ディレクトリを/pages内に配眮したこずです。
どこに行くのかわからないので、 src/ディレクトリに眮いおみたす。

それがうたくいくかどうか私に知らせおください

也杯

@gafemoyanoはそれを詊したしたが、機胜したせんでした:(
ギャツビヌはそれを認識したせん。

ありがずう

私はいく぀かのプラグむンに盎面したので、私のものを曞くこずにしたした元のプラグむンから100借りたした、それで幞運にも私の問題を解決し、gatsbyプラグむンの曞き方を孊ぶこずができたした

私はアプリケヌションから抜出したした、それがあなたの問題を解決するのに圹立぀こずを願っおいたす、問題はapp内のbcに盎面したしたSSRでは凊理されるべきではないgraphqlク゚リがありたす、ブラりザだけです

@KyleAMathewsサンプルサむトずはどういう意味ですか どこかに远加したいですか 私はこれに取り組むこずができたす。

gatsby-config.js

plugins: [
    `app-layout`, // I set my layout
    {
      resolve: `app-client-only`, // I handle app pages
      options: { prefixes: [`/app/*`] },
    },
  ],

plugins / app-layout / gatsby-node.js

// Implement the Gatsby API “onCreatePage”. This is
// called after every page is created.
exports.onCreatePage = ({ page, boundActionCreators }) => {
  const { createPage } = boundActionCreators;

  if (page.path.match(/^\/app/)) {
    // It's assumed that `app.js` exists in the `src/layouts/` directory
    page.layout = "app";
  }

  return true;
};

plugins / app-client-only / gatsby-node.js

// Prefixes should be globs (i.e. of the form "/*" or "/foo/*")
const validatePrefixEntry = prefix => {
  if (!prefix.match(/^\//) || !prefix.match(/\/\*$/)) {
    throw Error(
      `Plugin "gatsby-plugin-client-only-paths" found invalid prefix pattern: ${
        prefix
      }`
    )
  }
}

exports.onCreatePage = ({ page, store, boundActionCreators }, { prefixes }) => {
  const { createPage, deletePage } = boundActionCreators
  const re = {}
  prefixes.forEach(validatePrefixEntry)

  return new Promise(resolve => {
    // Don't set matchPath again if it's already been set.
    if (page.matchPath || page.path.match(/dev-404-page/)) {
      resolve()
    }

    prefixes.some(prefix => {
      if (!re[prefix]) {
        // Remove the * from the prefix and memoize
        const trimmedPrefix = prefix.replace(/\*$/, ``)
        re[prefix] = new RegExp(`^${trimmedPrefix}`)
      }

      // Ensure that the path ends in a trailing slash, since it can be removed.
      const path = page.path.match(/\/$/) ? page.path : `${page.path}/`

      if (path.match(re[prefix])) {
        page.matchPath = prefix.replace(/\*$/, `:path`)
        if (path != '/app/') {
          // <<<<<<<<<<<<<<<<< here is my modification >>>>>>>>>>>>>>>>>>>>>>>
          // do not try to process on SSR, user needs to be logged to
          // consume GraphQL API and render `app` pages correctly
          deletePage(page)
          // <<<<<<<<<<<<<<<<< here is my modification >>>>>>>>>>>>>>>>>>>>>>>
        }
        // createPage(page)
        return true
      }

      return false
    })

    return resolve()
  })
}

したがっお、この問題が100 @ KyleAMathewsに関連しおいるかどうかは

pages / app / index.js

import CreateSchedule from './components/CreateSchedule'
import ViewSchedule from './components/ViewSchedule'
...
  <ApolloProvider client={client}>
        <Provider store={store}>
          <Switch>
            <Route exact path="/app" component={CreateSchedule} />
            <Route path="/app/:id" component={ViewSchedule} />
          </Switch>
        </Provider>
      </ApolloProvider>

gatsby-node.js

exports.onCreatePage = async ({ page, boundActionCreators }) => {
  const { createPage } = boundActionCreators

  // page.matchPath is a special key that's used for matching pages
  // only on the client.
  if (page.path.match(/^\/app/)) {
    page.matchPath = '/app/:path'

    // Update the page.
    createPage(page)
  }
}

gatsby-plugin-create-client-pathsプラグむンも運が悪かったので詊したした。

私のCreateScheduleコンポヌネントは404ingなしで正垞に動䜜したす https //www.appointmentscheduler.org/app

問題はViewScheduleルヌト/コンポヌネントにありたす https //www.appointmentscheduler.org/app/1b42d8e8-66b5-4a8d-a0b5-fd4bb13bed09

ああ、404はビルドされた埌にのみ発生したす-開発サヌバヌにはこの問題はありたせん

䜕か案は

@rozenmdそのためのサヌバヌルヌティングが必芁です。 netlifyを䜿甚する堎合は、 gatsby-plugin-netlifyをむンストヌルするず、サヌバヌルヌティング構成が自動的に生成されたすnetlify-identity-widgetがあるようですが、それがサむトのサヌビスに䜿甚しおいるこずを正確に意味するかどうかはわかりたせん

驚くばかり
ありがずう@pieh
私が䜿甚したnetlifyスタヌタヌhttps://github.com/konsumer/gatsby-starter-bootstrap-netlifyのgatsby-config.jsに'gatsby-plugin-netlify'がなかったようです

それを远加しおデプロむするず、この問題が修正されたした😄

@KyleAMathews Gatsbyの䜿甚に䌎う可胜性のある

@ cf73 GoDaddy DNSをNetlifyのようなギャツビヌに適したものに向けおみたしたか

@rozenmdを明確にするために、drupalヘッドレスCMSはGoDaddyでホストされおいたす。 Gatsbyサむトはただロヌカルで実行されおいたす。 だから私があなたを誀解しない限り、Netlifyがどのように圹立぀のかわかりたせんか

@ cf73 https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-source-drupal/src/gatsby-node.jsは、おそらく䜕らかのキュヌを䜿甚できたす better-queueを䜿甚しおいたす他の堎所では Promise.all代わりに、同時リク゚ストをより管理しやすいものに制限したす。 あなたはそれを実装できるず思いたすか

@piehはい、私はより良いキュヌの䜿甚を芋たした、たずもな解決策のように聞こえたす。 恐れ入りたすが、私は自分でそれを行う぀もりはありたせん-私が取り組んでいる倧きなクラむアントプロゞェクトの503゚ラヌを解決しようずしおここで぀たずきたした。そのためにGatsbyを䜿甚したいず思いたす。 締め切りが厳しいので、今埌数時間たたはせいぜい翌日かそこらでこれに察する回避策がない堎合、私は別のアプロヌチを探す必芁がありたす。 誰かがこれを解決するために私が即座に䜕ができるか必芁に応じおホスティングを切り替えるこずを含むを提案できたすか 実蚌枈みのDrupal +ホスティング+ギャツビヌワヌクフロヌはありたすか

@ cf73締め切りに぀いお感じたす-https//discordapp.com/invite/0ZcbPKXt5bVoxkfV with PM to私-私のハンドルはgrajen3です、私は今日それを自分でできるかどうかを確認したす

@piehそれは玠晎らしいでしょう、ありがずう

@KyleAMathewsクラむアントサむトで䜜業しおいるずきに絶望的な問題に盎面しおいたす。これは簡単だず思いたすが、䜕かが足りたせん。 Stackは、Gatsbyのgraphiqlに察するDrupalJSON-APIです。 ノヌドに匕数を枡すこずはできたせん添付を参照。 私の知る限り、これはギャツビヌのDrupalスキヌマが完党に具䜓化されおいないためですか それずも私は䞀歩を逃しおいたすか どんな助けでも緊急にそしお倧いに感謝したす!!
unknown-arg

ク゚リは次のようになりたす。

NodeArticle(id: { eq: GUID }) {
  id
  ...otherFields
}

allNodeArticleをIDでフィルタリングするこずもできたすが、1぀だけを遞択する堎合は、 NodeArticle盎接ク゚リする方がクリヌンです。

@KyleAMathewsどうもありがずうございたした これがカバヌされおいるドキュメントを教えおいただけたすか 私はこれたでこれに出くわしおいたせん...ギャツビヌがDrupalず話す方法、たたは私が芋逃したばかりのGraphQLのコア暙準動䜜に固有ですか このような゜ヌス固有のドキュメントを゜ヌスプラグむンず䞀緒にもっず目に芋える圢で宣䌝するずいうアむデアはありたすか

これはgatsbyのコア機胜実行されたルヌトク゚リレベルのフィルタリングであり、drupal固有ではありたせん。 ゜ヌスプラグむンはgraphqlスキヌマを定矩できたせん-これは、プラグむンによっお提䟛される「生の」デヌタに基づいおgatsbyコアが実行しおいるタスクです。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡