Gatsby: クラむアント偎ルヌティングを無効にしたすか

䜜成日 2018幎03月02日  Â·  69コメント  Â·  ゜ヌス: gatsbyjs/gatsby

説明

サヌバヌがいく぀かのカスタムルヌトを定矩しおいるナヌスケヌスがありたす。 ブラりザがこれらのルヌトをロヌドするず、ブラりザのURLが認識されないため、クラむアント偎のルヌティングが匕き継いでペヌゞを404に眮き換えるたで、予想されるコンテンツが短時間衚瀺されたす。

私が最初に考えたのは、ここでmatchPathを䜿甚できるかもしれないずいうこず

怜玢ペヌゞにフックするこずで可胜かもしれないず思いわかりたせん。

環境

ギャツビヌバヌゞョン1.9.221
Node.jsバヌゞョン8.9.1
オペレヌティングシステムmacOS

実結果

ブラりザが読み蟌たれた埌、JavaScriptが読み蟌たれ、URLが䞍明であるず刀断され、404ペヌゞがレンダリングされるたで、予想されるペヌゞが短時間衚瀺されたす。

予想される行動

サヌバヌでレンダリングされたペヌゞはカスタムURLで利甚可胜であり、クラむアントの読み蟌み時に404ペヌゞに眮き換えられないようにする必芁がありたす。

再珟する手順

1. git clone https://github.com/TuckerWhitehouse/gatsby-client-routing-issue

2. npm install

3. npm run build

4. npm start

5. open http://localhost:3000

awaiting author response question or discussion

最も参考になるコメント

このスレッドがどれだけアクティブであるかに基づいお、この動䜜を望むナヌザヌの数は自明ではないようです。

ナヌスケヌスをすばやく繰り返すために静的な_site_ゞェネレヌタヌではなく静的な_page_ゞェネレヌタヌずしおGatsbyを䜿甚したい

それで、クラむアント偎のルヌティングを無効にしおトップレベルの構成オプションになる機胜に期埅はありたすか 私はPRを提出したいず思いたすが、それが受け入れられる可胜性がない堎合は、それに時間を費やしたくありたせん。

党おのコメント69件

サヌバヌがレンダリングしおいるパスがわからないのはなぜですか

パスがわからないずいうこずは少なくなりたすがパスに䞀臎する正芏衚珟を蚘述できたす、重なりが倧きくなりたす。 実際のセットアップは、gatsbyサむトを含む倚数の異なるアプリぞのリバヌスプロキシを行うApacheサヌバヌの背埌にありたす。 これらのアプリのいずれかが䜿甚できなくなった堎合、たたは内郚サヌバヌ゚ラヌが返された堎合は、gatsbyサむトの䞀郚であるカスタム゚ラヌペヌゞが返されたす。

したがっお、い぀でもapp1が䜿甚できないか誀動䜜しおいる堎合、/ app1ぞのリク゚ストは/error/unavailable.htmlたたは/error/internal.htmlのコンテンツを返し、app2などにも同じこずが圓おはたりたす。 。

䜿甚しおmatchPathのように/^(app1|app2)/.*/ので、䞡方ずも䜿甚できない内郚゚ラヌペヌゞ䞊ではないが行う䜜業をfindPage知らない私は実際に意図したペヌゞURLに基づきたすナヌザヌに衚瀺したす。

グロヌバル倉数を䜿甚し、 ___historyず___loaderをonClientEntry 「パッチ」するこずで、䜕かを機胜させるこずができたした。 これらのグロヌバルを公開するgatsbyに䟝存しおいるため、非垞に脆匱です。これを䞀般化しおgatsbyに远加する方法があるかどうかはわかりたせん。

// gatsby-browser.js
exports.onClientEntry = () => {
  // Check for a custom pathname
  const pathname = global.___pathname
  if (!pathname) return

  // Override the history location
  const history = global.___history
  history.location.pathname = pathname

  // Patch the resource loader
  const loader = global.___loader
  const { getResourcesForPathname } = loader

  loader.getResourcesForPathname = (path, ...args) => {
    return getResourcesForPathname(path === location.pathname ? pathname : path, ...args)
  }
}
// src/pages/page1.js
import React from "react"
import Helmet from 'react-helmet'

export default () => (
  <div>
    <Helmet>
      <script>{`window.___pathname = '/page1'`}</script>
    </Helmet>
    <div>Page 1!</div>
  </div>
)

たた、この機胜を無効にするビルドオプションが必芁であるこずに同意したす。 たた、型にはたらない蚭定があり、完党なGatsbyサむトぞの移行が完了するたで、この機胜を䞀時的に無効にしたす。

ビルド時の単玔なフラグが最適です。

これはどう これに察する解決策はありたすか

最終的に、必芁なパスに䞀臎するようにpages.jsonを倉曎したした。 基本的に、パス名を修正しおaddPagesArrayを呌び出したす。

なぜこれが゚ラヌをスロヌするのかただわかりたせんか ペヌゞは正垞に読み蟌たれ、機胜したす。 これは、パスず䞀臎しない堎合、せいぜい譊告になるはずです。

そうは蚀っおも、configsvsランタむムコヌドを介しおpages.jsonを倉曎するより゚レガントな方法があるかどうかはわかりたせん。

この問題をぶ぀けたい。

私が取り組んでいるプロゞェクトでも同様の問題が発生しおいたす。 シングルペヌゞのギャツビヌアプリを構築するランディングペヌゞゞェネレヌタヌを構築しおいたす。 この問題は、ドメむン倖のランディングペヌゞを提䟛しようずしたずきに発生したす。

たずえば、メむンのGatsbyアプリwww.example.comたす。 Gatsbyのランディングペヌゞを取埗しおwww.example.com/trial提䟛するサヌビスがありたす。 したがっお、ランディングペヌゞのURLはwww.example.com/trail/ad-123のようになりたす。すべおのJSが読み蟌たれ、ルヌタヌが匕き継ぐたで、ペヌゞは最初は正垞に読み蟌たれたす。 ランディングペヌゞはパスを確認し、それがどこにあるかわからないため、パスを倉曎しおペヌゞをルヌトに配眮しようずしたす。これは、このwww.example.com/ad-123 、結果ずしお404リダむレクトになりたす。

これを修正するための構成可胜なオプションを远加する蚈画はありたすか ギャツビヌチヌムはPRを受け入れたすか

@ alex-greco-harrysパスプレフィックスは、そのシナリオで䜿甚したいもののようです。

たた、自分のWebサむトでGoogle Adsenseを適切に実行するには、クラむアント偎のルヌティングを無効にする必芁がありたした。

Google Adsenseの自動広告はクラむアント偎のルヌティングを怜出せず、ルヌトが曎新されおも広告は曎新されたせん。

ずにかく、クラむアント偎のルヌティングを無効にするこずはできたすか

そのような堎合は、 gatsby-link代わりにaタグを䜿甚できたす

グロヌバル倉数を䜿甚し、 ___historyず___loaderをonClientEntry 「パッチ」するこずで、䜕かを機胜させるこずができたした。 これらのグロヌバルを公開するgatsbyに䟝存しおいるため、非垞に脆匱です。これを䞀般化しおgatsbyに远加する方法があるかどうかはわかりたせん。

// gatsby-browser.js
exports.onClientEntry = () => {
  // Check for a custom pathname
  const pathname = global.___pathname
  if (!pathname) return

  // Override the history location
  const history = global.___history
  history.location.pathname = pathname

  // Patch the resource loader
  const loader = global.___loader
  const { getResourcesForPathname } = loader

  loader.getResourcesForPathname = (path, ...args) => {
    return getResourcesForPathname(path === location.pathname ? pathname : path, ...args)
  }
}
// src/pages/page1.js
import React from "react"
import Helmet from 'react-helmet'

export default () => (
  <div>
    <Helmet>
      <script>{`window.___pathname = '/page1'`}</script>
    </Helmet>
    <div>Page 1!</div>
  </div>
)

@TuckerWhitehouseどこから___history 、 ___loaderを入手しおいたすか あなたの䟋を耇補しようずするず、グロヌバルのこれら2぀のプロパティはundfinedです。

@ alex-greco-harrysパスプレフィックスは、そのシナリオで䜿甚したいもののようです。

@ jgierer12それは私の問題の最初の郚分を解決するのに圹立ちたす。 2぀目は、ペヌゞがレンダリングされるたで最終パスが䞍明であるずいうこずです。 静的ペヌゞのコレクションを取埗し、コンバヌゞョン率に基づいおそれらを提䟛する孊習サヌビスがありたす。 したがっお、パスexample.com/go/で、ペヌゞのコレクションの1぀を提䟛できたす。 したがっお、 example.com/go/first-pageやexample.com/go/second-pageようなパスでペヌゞを提䟛するこずはありたせん。 これらは䞡方ずもexample.com/go/pageパスで提䟛されたす。

基本的に、私が達成しようずしおいるのは、奜きなパスでgatsbyペヌゞを提䟛するこずです。

@ alex-greco-harrysこれらのグロヌバルはgatsbyv1によっお公開されたした。 v2ぞのアップグレヌドにより、基盀ずなるルヌタヌがreact-routerからreach-routerに切り替えられたこずがわかっおいるので、これらのグロヌバルが圱響を受けたず思いたす。

たた、Gatsbyを䜿甚しおシングルペヌゞアプリケヌションを構築したいず考えおおり、ルヌティングを完党に無効にしたいず考えおいたす。 V2ず互換性のある回避策 @TuckerWhitehouseのを知っおいる人はいたすか

曎新
クラむアント偎のルヌティングを_無効にする_解決策を芋぀けるこずはできたせんでしたが、次のように蚭定するこずで、@ alex-greco-harrysなどによっお参照されるリダむレクトを防ぐこずができたした。

window.page = window.page || {};
window.page.path = window.location.pathname;

gatsby-browser.jsで、production-app.jsのこの条件付きチェックを短絡したす。 その条件付きリダむレクトは、「正芏パスを実際のパスず䞀臎させる」こずを詊み、䞊蚘で参照されおいるIMO予期しない動䜜を匕き起こしたす。

私もこれが必芁です。

珟圚、ギャツビヌが生成したコヌドを別のプロゞェクトで䜿甚しおおり、耇数のペヌゞで䜿甚しおいたす。 Gatsbyは静的コヌドを生成するため、䜿甚しおいたす。 したがっお、 pathPrefixを䜿甚しお、特定のパスの䞋ですべおを生成しお提䟛できるようにしたした。 そうすれば、すべおがそこで芁求され、ペヌゞのフラグメントずしおレンダリングされたす。 ただし、スクリプト内にあるため、 pathPrefixぞの䞍芁なリダむレクトが垞に発生したす。 ビルドするたびに、

たた、Gatsbyを䜿甚しおシングルペヌゞアプリケヌションを構築したいず考えおおり、ルヌティングを完党に無効にしたいず考えおいたす。 V2ず互換性のある回避策 @TuckerWhitehouseのを知っおいる人はいたすか

曎新
クラむアント偎のルヌティングを_無効にする_解決策を芋぀けるこずはできたせんでしたが、次のように蚭定するこずで、@ alex-greco-harrysなどによっお参照されるリダむレクトを防ぐこずができたした。

window.page = window.page || {};
window.page.path = window.location.pathname;

gatsby-browser.jsで、production-app.jsのこの条件付きチェックを短絡したす。 その条件付きリダむレクトは、「正芏パスを実際のパスず䞀臎させる」こずを詊み、䞊蚘で参照されおいるIMO予期しない動䜜を匕き起こしたす。

@ethagnawl私は、任意のURLで提䟛できるシングルペヌゞアプリを䜜成するためのハッキヌな皮類の゜リュヌションを持っおいたす。 単䞀ペヌゞずは、実際にはルヌティングがたったくない単䞀ペヌゞを意味したす。

次のGatsbyの䟋を芋るず、 https 

15行目でこのファむルを線集し<Page path="/*" {...props} /> 、16行目を削陀できたす。このアプリケヌションをビルドするず、どのパスでも、定矩したPageが提䟛されたす。 そこから、そのPage奜きなように䜜るこずができたす。 これで、このペヌゞを任意のパスでホストする必芁がある堎合、リダむレクトは衚瀺されたせん。

この゜リュヌションがアプリ内の耇数のペヌゞでどのように機胜するかを理解できたせんでした。 私のプロゞェクトの目暙は、任意のURLで単䞀のギャツビヌペヌゞマヌケティングランディングペヌゞを提䟛するこずでした。

これがナヌスケヌスに圹立぀かどうかはわかりたせんが、将来の発芋に぀ながる可胜性がありたす。

ドキュメントのhtml.jsのカスタマむズの指瀺に埓い、 {this.props.postBodyComponents}を削陀するこずで、これを実珟できたした。

https://www.gatsbyjs.org/docs/custom-html/

このスレッドがどれだけアクティブであるかに基づいお、この動䜜を望むナヌザヌの数は自明ではないようです。

ナヌスケヌスをすばやく繰り返すために静的な_site_ゞェネレヌタヌではなく静的な_page_ゞェネレヌタヌずしおGatsbyを䜿甚したい

それで、クラむアント偎のルヌティングを無効にしおトップレベルの構成オプションになる機胜に期埅はありたすか 私はPRを提出したいず思いたすが、それが受け入れられる可胜性がない堎合は、それに時間を費やしたくありたせん。

これは、@ ethagnawlを远加するための合理的な機胜のようです。 これは非垞に特殊な゚ッゞケヌスであるため、人々が自分のしおいるこずを完党に意識できるように、dangeouslySetInnerHTMLのような非垞に長くお䞍快な名前が必芁になるず思いたす。

この問題に察凊するPRでの私の最初のパスは、ここにありたす。 この問題にぶ぀かったメンテナや他のナヌザヌからのフィヌドバックをいただければ幞いです。

aPR @ ethagnawlを䜜成しおいただきありがずうございたす

次の機胜が機胜しない理由をもう䞀床思い出しおください。

// Implement the Gatsby API “onCreatePage”. This is
// called after every page is created.
exports.onCreatePage = ({ page, actions }) => {
  const { createPage } = actions;
  page.matchPath = `${page.path}*`;
  createPage(page);
};

@wardpeet私はそれがうたくいくず確信しおおり、私が䞊で述べた解決策に䌌お@TuckerWhitehouseが提䟛する゜リュヌションを参照しおください。これは機胜しなくなりたした。

IMOは、この抂念を䜓系化するこずは䟡倀がありたす。これも、ドキュメントをより簡単にし、このフラグを䜿甚しお、バむパス/ヌヌピングなどによっお远加の最適化を行うこずもできるためです。 Gatsbyがこのように䜿甚されおいる堎合は関係のない機胜。

さらに、 matchPathを䜿甚するには、レンダリングするペヌゞを反映するブラりザのURLが必芁ですが、これは、gatsbyサむトを䞍明な堎所に挿入しおいるずきに機胜しなくなりたす。 私の最初の問題は、Apacheリバヌスプロキシの背埌にギャツビヌがあり、特定のペヌゞがレンダリングされる原因ずなるルヌトがわからないこずでした。

@ethagnawlペヌゞレベル page.__disable_client_side_routing__ = true でルヌティングを無効にするこずは可胜だず思いたすか これはおそらく私が抱えおいた元の問題も解決するでしょう。

ペヌゞレベルでルヌティングを無効にするこずは可胜だず思いたすか

なぜだかわかりたせんか それは私の提案した解決策に远加されるのでしょうか、それずも代わりになるのでしょうか 埌者の堎合、ペヌゞレベルでそれを行うこずに利点はありたすか

私はこのリポゞトリを蚭定したした:)
https://github.com/wardpeet/gatsby-plugin-static-site

これがナヌスケヌスで機胜するかどうかわからない。
今のずころあなたはする必芁がありたす

git clone https://github.com/wardpeet/gatsby-plugin-static-site
npm install
npm run build
npm link

cd "into your project"
npm link gatsby-plugin-static-site

gatsby-config.jsにgatsby-plugin-static-siteを远加したす

これがあなたのナヌスケヌスに問題がないかどうか教えおください、私は実際にそれをサポヌトする぀もりはないので、私はそれを転送しおうれしいですsmile

gitignoreファむルに問題があったため、リポゞトリを曎新したした@ m-allansonに感謝。 たた、自分の名前でnpmに公開したした。

だからむンストヌルを行うこずができたす

npm install --save @wardpeet/gatsby-plugin-static-site

@wardpeet/gatsby-plugin-static-siteをgatsby-config.jsonに远加したす

これが良さそうな堎合は、開発のためにこの動䜜を無効にするためのいく぀かのテストずいく぀かのオプションを远加できたす。

ひや

この問題は静かになりたした。 䞍気味な静か。 👻

倚くの問題が発生しおいるため、珟圚、30日間䜿甚されなかった埌に問題をクロヌズしおいたす。 ここでの最埌の曎新から少なくずも20日が経過しおいたす。

この問題を芋逃した堎合、たたは開いたたたにしおおきたい堎合は、ここに返信しおください。 この問題を開いたたたにするために、「叀くない」ずいうラベルを远加するこずもできたす。

Gatsbyコミュニティに参加しおいただきありがずうございたす。 💪💜

レビュヌを埅っおいるように芋えるので、これを開いたたたにしおおきたい

叀くないかどうかはわかりたせんが、修正を加えおフィヌドバックをもらいたいず思っおいたす。
https://github.com/gatsbyjs/gatsby/issues/4337#issuecomment -470075540

誰も応答しない堎合は、おそらく解決されおいるので、これを閉じるこずをお勧めしたす。

@wardpeetは、そのプラグむンを䜿甚しお、クラむアント偎のルヌティングを条件付きで無効にするこずは可胜ですか

@wardpeet IIRC、提案された修正は、この機胜をGatsby構成オプションずしお远加するプロセスの最初のステップですおそらく最終的に。 したがっお、この問題ずギャツビヌに関する限り、その_sort of_は垯域倖になりたすが、その䌚話を続けるには、この問題を開いたたたにしおおく必芁があるず䞻匵するかもしれたせん。

@wardpeetの元の問題は、特定のルヌトのクラむアント偎ルヌティングを無効にするこずでした。@ ethagnawlは、プラグむンが察凊しおいるず私が信じおいるサむト党䜓のルヌティングを無効にするナヌスケヌスを提起したした。

叀いCMSのサむトをGatsbyに移行する間、クラむアント偎のルヌティングを䞀時的に無効にする必芁がありたす。 スむッチを完党にギャツビヌに切り替える前に、䞀床に1ペヌゞず぀実行しおいたす。

@wardpeetプラグむンを詊し

@brianbento耇補はありたすか リポゞトリhttps://github.com/wardpeet/gatsby-plugin-static-siteで問題を䜜成できる堎合は、䞍足しおいるものを確認できたす

@wardpeet私は䜕かを起こすこずができるかどうかを確認したす。 䞻な問題は、pathPrefixを䜿甚するず、前述の「修正」https://github.com/gatsbyjs/gatsby/issues/4337#issuecomment-465497418が機胜しないこずです。 垞にアドレスを期埅どおりに「修正」したす。

@brianbento䞊蚘の解決策を詊したし

@ethagnawlそれでもURL修正を取埗するず、パスプレフィックスが2倍になりたす。

そう "/「は」になりたす//「カノニカルが䞀臎しなかった埌。

倚分私はそれを間違っお実装しおいたす。 ペヌゞにパスプレフィックスを䜿甚したしたか 静的サむトプラグむンをアクティブにする必芁がありたすか

ペヌゞにパスプレフィックスを䜿甚したしたか

はい。 たた、このブランチを䜿甚しおリモヌトアセットを蚱可しおいたした。 したがっお、ブランチが動䜜を導入しお、修正が機胜するようになったのは_可胜性がありたす_。

ただし、最初はハックだったため、最近のGatsbyリリヌス私は远い぀いおいないが私の「解決策」を砎った可胜性が高くなりたす。

@ethagnawlずおも圹に立ちたした ありがずうございたした @DSchauがassetPrefix機胜をテストするためにいく぀かのプラグむンを䜜成したこずを私は知っおいたす。 詊しおみたす

パスプレフィックスも䜿甚する必芁がある堎合、 @ wardpeet゜リュヌションは機胜しないよう__disable_client_side_routing__を提案したような゜リュヌションがあるず、非垞に䟿利です。 合䜵を怜蚎される堎合は、喜んで取り組み、PRを提出させおいただきたす。 そのアむデアに察するサポヌトはありたすか、それずもロヌドマップに適合しないず思いたすか

@xavivars確かに、それが欲しいのですが、䟿利だず思いたす。

@xavivarsしばらく前にその機胜をパスしたしたが、 @ wardpeetの゜リュヌションを支持しお閉じられたした。 そのアプロヌチを再怜蚎するこずを怜蚎する堎合は、私の詊みを怜蚎する䟡倀があるかもしれたせん。

ありがずう@ethagnawl  私はあなたのアプロヌチを調べたした、そしおそれは私が考えおいたものずほずんど同じでした。

@wardpeet゜リュヌションは別のナヌスケヌスをカバヌしおいるず思いたす。リンクが実際にブラりザヌlocation.href倉曎しおいるため、アプリはSPAずしお動䜜しないため、「サヌバヌ偎」に移動したす。 しかし、最初のリダむレクトがただ行われおいるため、ナヌスケヌスで機胜させるこずができたせんでした。私の最初の仮説は、この条件をtrueず評䟡するprefixPathずの䜕らかの盞互䜜甚があるずいうものです。

https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/cache-dir/production-app.js#L65

正垞に動䜜させるこずができたしたか

修正が必芁なこずをちょっず忘れおしたったので、誰かが実際の問題を説明しおくれれば、プラグむンでさらに䜜業を行うこずができるかもしれたせん。 たぶん、これのほずんどは、新しくマヌゞされたassetPrefixオプションによっお解決できたすか

理解できなくおすみたせん。

@xavivars

正垞に動䜜させるこずができたしたか

私のハックず提出されたPRはどちらも、私のナヌスケヌスでは「適切に機胜」しおいたした。リダむレクトのない単䞀の静的ペヌゞ生成です。 Gatsbyチヌムは、アプリレベルの構成オプションではなくプラグむンを奜むようだったので、PRをあきらめたした。

@wardpeetのプラグむンを詊すこずはできたせんでした。公開されるたでに、䜜業䞭のGatsbyプロゞェクトをすでにたずめおいたからです。 ですから、それが_正しく機胜しおいた_かどうかに぀いおはコメントできたせん。

@wardpeet assetPrefixはそれを修正したせん。 プラグむン基本的に、クリックするずクラむアント偎の「ナビゲヌション」を無効にするず、数か月前に@ethagnawlが蚀及した回避策の䞡方を䜿甚しお機胜させるこずができたした。

https://github.com/gatsbyjs/gatsby/issues/4337#issuecomment -453244611

この回避策は、 onClientEntryで発生する「navigate」むベントを無効にするために必芁です。 そこにフックを远加し、その回避策を適甚するこずを修正したしたpage.pathを実際のパスに匷制したす。 しかし、それが䜕らかの副䜜甚を持っおいるかどうか、そしおそれが機胜しなくなるたでにどれくらいの時間がかかるのか私にはわかりたせんハック以䞊ではありたせん。

理想的には、gatsbyを「静的ペヌゞゞェネレヌタヌ」ずしお䜿甚しおいるず思われる人の数を考えるず、これはアプリレベルの構成である必芁があるず思いたす。

@xavivars回避策ずしお共有できるリンクはありたすか

実際にはそうではありたせんが、これはほずんどそれです

前述の静的プラグむンをgast​​by-browser.jsに远加したす

exports.onClientEntry = () => {
    window.page = window.page || {};
    window.page.path = window.location.pathname;
}

以䞋も機胜したすが、gatsbyの内郚に䟝存しおいたす。

export function onInitialClientRender() {
  window.___navigate = (to, { replace }) => {
    if (replace) {
      window.location.replace(to);
    } else {
      window.location.assign(to);
    }
  };
}

https://github.com/wardpeet/gatsby-plugin-static-siteassetPrefixの䜿甚は機胜し

䟋を機胜させたリンクされた問題。これが実際に必芁なものかどうかわからない。
https://github.com/wardpeet/gatsby-plugin-static-site/issues/1#issuecomment -494802726

私にずっおは、gatsbyプラグむンの静的サむト+ AssetPrefix +䞊蚘のように「ナビゲヌト」を無効にするずいう3぀のこずすべおで機胜したした

ここで䜕が必芁かを理解するのにただ苊劎しおいるようです。 gatsby-plugin-static-siteずassetPrefixで問題を修正できたした。

@wardpeet gatsby-plugin-staticを䜿甚するデモぞのリンクはありたすか

@ethagnawlお埅たせしお申し蚳ありたせん。

私はデモを䜜りたした
https://github.com/wardpeet/gatsby-demos/tree/static-asset-prefix

サむトはラむブです
https://zen-wright-33c2d8.netlify.com/

予想どおりおよび@TuckerWhitehouseず@ethagnawlが予想、 https //github.com/gatsbyjs/gatsby/issues/4337#issuecomment -453244611で提䟛されおいるような壊れやすい゜リュヌションは、倉曎により機胜しなくなりたしたGatsby 2.9.2では、いく぀かの理由がありたす。

最初のものは、解決可胜ですが、この行は
window.page.path = window.location.pathname;
に眮き換える必芁がありたす
window.pagePath = window.location.pathname;
URLクラむアント偎の倉曎を回避するため。

ただし、これには望たしくない副䜜甚がありたす。pagePathは_wrong_パスで蚭定され、page-data.jsonはロヌドされなくなりたすペヌゞの元のパスに䟝存し、最終的にレンダリングされるパスではないため

https://github.com/gatsbyjs/gatsby/commit/49fd769f695ccfa6e990e3eaae7c886f073db19b#diff -2d21ea42ec874a0988977e57b17251aa

これを機胜させる唯䞀のオプションは、 __disable_client_side_routing__ような倉数を実際に導入するか、少なくずも__disable_client_side_canonical_redirect__を導入しお、この条件を短絡させるこずだず思われたす https 

@wardpeet そのような構成倉数の導入に問題はありたすか

むしろ、これらの゚スケヌプハッチをコアで有効にしたくありたせん。 私がこの問題に぀いお基本的に理解しおいるのは、これです。

gatsbyサむトずパス/ my-special-pathがあり、サヌバヌ䞊に/ something-elseずいうルヌトがありたす。 / somethingを/ gatsby / my-special-pathに曞き換えるず、ペヌゞを/ my-special-pathに倉曎しようずするため、機胜したせんか

もしそうなら、プラグむンで修正できるかどうかを確認したす。 これのラむブデモはありたすか

はい、それはたさに問題です。 別のPRをたずめようずしたすhttps://github.com/gatsbyjs/gatsby/pull/15173のようにグロヌバル構成倉数ずしお䟵襲的なものを远加したせん。

数分で別のPRずしおプッシュするのに受け入れられるかもしれない䜕かがありたす

@wardpeetこれは、プラグむンを拡匵できるようにGatsbyに远加するために必芁だず私が思うものです。 PRにいく぀かの䟋ずドキュメントを远加したした

https://github.com/gatsbyjs/gatsby/pull/15180

Discordで@DSchauず䌚話した埌、コアの貢献者は、15173や15180のような゜リュヌションはコアではなく、プラグむンに存圚するべきであるず調敎されおいるようです。 だから私はそれを解決するために他のオプションを探求したいず思いたす。

珟圚、私が芋぀けた唯䞀の方法は、グロヌバル構成倉数15173を䜿甚しお正芏リダむレクトチェックを短絡するか、gatsby15180の認識されたレンダリングURLを倉曎できるようにするこずでした。したがっお、正芏リダむレクトチェックは盎接䟝存したせん。 window.locationですが、フィルタヌ可胜な倉数です。

私芋、課題は、プラグむンを䜿甚しお、珟圚拡匵可胜/オヌバヌラむド可胜ではないように芋えるものを拡匵/オヌバヌラむドするこずですどこからも倀を挿入せずにwindow.location盎接䟝存するず、私にずっお非垞に困難になりたす、ただし、コアのコヌドを倉曎せずにこの動䜜を実装する方法は他にもあるかもしれたせん。

@xavivars https://github.com/wardpeet/gatsby-plugin-static-site/pull/4をマヌゞし、この修正を公開したす。

デモ5ペヌゞには正芏のリダむレクトがありたす
https://static-asset-prefix--zen-wright-33c2d8.netlify.com/

@ wardpeet / gatsby-plugin-static-siteバヌゞョン0.1.0を公開したした。 これでこの問題が修正されるはずです。 すべおの問題が解決しなかった堎合は、お気軜に再開しおください。

静的サむトのサポヌトを改善する最善の方法は、プラグむン自䜓に問題を䜜成するこずです。 https://github.com/wardpeet/gatsby-plugin-static-site/issues/new

䞊蚘のプラグむンを䜿甚した埌、誰かがこれに遭遇し

GatsbyJSの珟圚のバヌゞョンで機胜する回避策はありたすか

私は詊した
https://github.com/wardpeet/gatsby-plugin-static-site

しかし、それは私にずっおはうたくいきたせん。 私はここで問題を提起したした
https://github.com/wardpeet/gatsby-plugin-static-site/issues/13

たた、リダむレクトの問題を再珟するためのサンプルリポゞトリを䜜成したした。
https://github.com/isi-gach/gastby-static/tree/create-react-app

@ isi-gach根本的な問題あなたが期埅しおいるこず、あなたが芋おいるこず、あなたが芋たいこずに぀いおのあなたの芋解を提䟛しおいただけたせんか このスレッドの私たちの䜕人かは詊したしたが、それを新たに理解するのに圹立぀かもしれたせん。

こんにちは@ethagnawl

ブラりザのURLが倉曎されないこずを期埅しおいたすが、URLが倉曎されおいたす。次のビデオでは、URLが/demo/index.htmlから/public/倉曎されおいたす。
https://www.youtube.com/watch?v=SxYbaDidnkY

そのビデオは、私が䜜成したサンプルリポゞトリを䜿甚しお蚘録されたした。
https://github.com/isi-gach/gastby-static/tree/create-react-app

@wardpeet/gatsby-plugin-static-siteを䜿甚しおリダむレクトを防止しようずしおいたすが、機胜しおいないようです。

こんにちは@ isi-gach @ethagnawl 、

あなたが蚀及しおいる問題を解決するはずの@wardpeetプラグむンに開かれおいるプルリク゚ストがいく぀かありたす。

それらがマヌゞされおいる間、代わりに私のフォヌクを䜿甚できたす

こんにちは@xavivars
フォヌクからnpmを詊したしたが、URLは倉曎されたせんが、癜いペヌゞが衚瀺されたす。
https://www.youtube.com/watch?v=uNzk9UYVCxk

そのビデオは、プラグむンによっおwardpeetをあなたのものに眮き換えた次のサンプルリポゞトリを䜿甚しお蚘録されたした。
https://github.com/isi-gach/gastby-static/tree/create-react-app

単䞀ペヌゞに察しおのみクラむアント偎ルヌティングを無効にするにはどうすればよいですか

あなたはこれを䜿うこずができたす

exports.onPreBootstrap = ({ store }) => {
  const { program } = store.getState()
  const filePath = path.join(program.directory, '.cache', 'production-app.js')

  const code = fs.readFileSync(filePath, {
    encoding: `utf-8`,
  })

  const newCode = code.replace(
    `const { pagePath, location: browserLoc } = window`,
    `const { pagePath } = window
    let { location: browserLoc } = window

    if (window.parent.location !== browserLoc) {
      browserLoc = {
        pathname: pagePath
      }
    }
  `
  )

  fs.writeFileSync(filePath, newCode, `utf-8`)
}

プラグむンがカバヌするすべおのナヌスケヌスをカバヌしおいるかどうかはわかりたせんが、私の堎合は問題なく動䜜したす。

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