ããã«ã¡ã¯ã
gatsby.jsã䜿çšããŠãŠã§ãã¢ããªãæ§ç¯ããAWSS3ãšCloudFrontãä»ããŠããããæäŸããããšãèããŠããŸãã
node.jsã¢ããªãäœæããå Žåãšæ¯èŒããŠãçºçããå¯èœæ§ã®ããåé¡ã¯ãããŸããïŒ
gatsby.jsã䜿çšããæ¹ãã¯ããã«ç°¡åãªããã§ããã®æ¹æ³ã§ã³ã³ãã³ãWebãµã€ããã¢ããªãšç°¡åã«çµ±åã§ããŸãã
å®ãããé¡ãããŸãã
ãããšã«
ãã£ãŒãããã¯ãããããšãã@ 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ãµã³ãã«ãµã€ããšã¯ã©ãããæå³ã§ããïŒ ã©ããã«è¿œå ãããã§ããïŒ ç§ã¯ããã«åãçµãããšãã§ããŸãã
plugins: [
`app-layout`, // I set my layout
{
resolve: `app-client-only`, // I handle app pages
options: { prefixes: [`/app/*`] },
},
],
// 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;
};
// 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ã«é¢é£ããŠãããã©ããã¯
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>
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ã¹ããŒããå®å
šã«å
·äœåãããŠããªãããã§ããïŒ ãããšãç§ã¯äžæ©ãéããŠããŸããïŒ ã©ããªå©ãã§ãç·æ¥ã«ãããŠå€§ãã«æè¬ããŸã!!
ã¯ãšãªã¯æ¬¡ã®ããã«ãªããŸãã
NodeArticle(id: { eq: GUID }) {
id
...otherFields
}
allNodeArticle
ãIDã§ãã£ã«ã¿ãªã³ã°ããããšãã§ããŸããã1ã€ã ããéžæããå Žåã¯ã NodeArticle
çŽæ¥ã¯ãšãªããæ¹ãã¯ãªãŒã³ã§ãã
@KyleAMathewsã©ããããããšãããããŸããïŒ ãããã«ããŒãããŠããããã¥ã¡ã³ããæããŠããã ããŸããïŒ ç§ã¯ãããŸã§ããã«åºããããŠããŸãã...ã®ã£ãããŒãDrupalãšè©±ãæ¹æ³ããŸãã¯ç§ãèŠéããã°ããã®GraphQLã®ã³ã¢æšæºåäœã«åºæã§ããïŒ ãã®ãããªãœãŒã¹åºæã®ããã¥ã¡ã³ãããœãŒã¹ãã©ã°ã€ã³ãšäžç·ã«ãã£ãšç®ã«èŠãã圢ã§å®£äŒãããšããã¢ã€ãã¢ã¯ãããŸããïŒ
ããã¯gatsbyã®ã³ã¢æ©èœïŒå®è¡ãããã«ãŒãã¯ãšãªã¬ãã«ã®ãã£ã«ã¿ãªã³ã°ïŒã§ãããdrupalåºæã§ã¯ãããŸããã ãœãŒã¹ãã©ã°ã€ã³ã¯graphqlã¹ããŒããå®çŸ©ã§ããŸãã-ããã¯ããã©ã°ã€ã³ã«ãã£ãŠæäŸããããçã®ãããŒã¿ã«åºã¥ããŠgatsbyã³ã¢ãå®è¡ããŠããã¿ã¹ã¯ã§ãã
æãåèã«ãªãã³ã¡ã³ã
Woah woah woah @ barbushç§ã¯æ¬åœã«ããªãã«ãã®ãããªè³ªåãåãç· ãŸãããããããŸããã ãããã²ã©ã質åã§ããå ŽåïŒããã¯ããã§ã¯ãããŸããïŒããããç¡èŠããŠãããã®äººã«åããæ¹ãè¯ãã§ãããã ãã®ãããªè³ªåã«ã¯äºåºŠãšçããªãã§ãã ããã
ããªãã®è³ªåã«@bolus ã Gatsbyã¯ãreactã¢ããªããã®ä»ã®webpack / reactã»ããã¢ãããäœæããã®ãšããªã䌌ãŠããããã«èšèšãããŠããŸãã ãããã£ãŠãWebã¢ããªã®æ§ç¯ã«å®å šã«äœ¿çšã§ããŸãã examplesãã£ã¬ã¯ããªãèŠããšãreduxã®äŸããããŸãã äŒãããããšããã«ãããšã人ã ã¯ãããApolloã§éåžžã«ããŸã䜿çšããŠããŸãã ãªã¬ãŒã¯ãgraphqlã®äœ¿çšæ³ãgatsbyãšç«¶åãããããgatsbyã§äœ¿çšããããšã¯ã§ããŸããããå°æ¥çã«ã¯ç°¡åã«åé¿ã§ãããšç¢ºä¿¡ããŠããŸãã
ç§ãç¥ã£ãŠããäž»ãªæ¬ ç¹ã¯ããããŒãžããäœæããŠããããšãåæãšããŠãããããããŒãžã®ãªããŸã£ãããªã¢ããªãäœæããŠããå Žåãããã¯ããŸãå¹æããªããèªç±ãããããå¶éããããšã«ããªããŸãã ãã®å Žåã¯ãCRAã®ãããªããããã©ãªã»ããã¢ããã䜿çšããã»ããããã§ãããã
ãã ãããããŒãžããäœæããŠããå Žåã¯ãã¢ããªãé«éã§èµ·åããããã®èªåã³ãŒãåå²ãšéçSSRãååŸã§ãããããgatsbyã¯åªããŠããŸãã
ãã€ããã£ãšæ£åŒãªãã¬ãŒããªãææžãæžããããšæããŸããããããŸã§ã®éãããã§è³ªåãåãä»ããŠåãã§ããŸãã