gatsbyjs / gatsby

The best React-based framework with performance, scalability and security built in.
https://www.gatsbyjs.com
MIT License
55.3k stars 10.31k forks source link

using-i18n example: Adding mdx file at src/pages makes gatsby stick in a loop #13601

Closed tareefdev closed 5 years ago

tareefdev commented 5 years ago

Description

After cloning this example repo, I tried to add an mdx page to the src/page, but whenever trying to build or develop the site, gatsby seems to stuck at source and transform nodes.

I added console.log(localizedPath); at this line I noticed that gatsby stuck in a loop:

success createPages — 0.041 s
⠁ /dev-404-page/
de/dev-404-page/
/404/
de/404/
/
de/
/404.html
de/404.html
/pop/
de/pop/
⠂ createPagesStatefully/pop
de/pop
/de/pop
de/de/pop
/de/pop
de/de/pop
/de/de/pop
de/de/de/pop
/pop
de/pop
⠄ createPagesStatefully/de/de/pop
de/de/de/pop
/de/de/de/pop
de/de/de/de/pop
/pop
de/pop
/de/pop
de/de/pop
⡀ createPagesStatefully/de/de/de/pop
de/de/de/de/pop
/de/de/de/de/pop
de/de/de/de/de/pop
/pop
de/pop
/de/pop
de/de/pop
/de/de/pop
de/de/de/pop
⢀ createPagesStatefully/pop
de/pop
/de/de/de/de/pop
de/de/de/de/de/pop
/de/de/de/de/de/pop
de/de/de/de/de/de/pop
/de/pop
de/de/pop
/de/de/pop
de/de/de/pop
/de/de/de/pop
de/de/de/de/pop
⠠ createPagesStatefully/pop
de/pop
/de/de/de/de/de/pop
de/de/de/de/de/de/pop
/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/pop
/de/pop
de/de/pop
/de/de/pop
de/de/de/pop
/de/de/de/pop
de/de/de/de/pop
/de/de/de/de/pop
de/de/de/de/de/pop
⠐ createPagesStatefully/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/pop
/de/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/de/pop
/pop
de/pop
/de/pop
de/de/pop
/de/de/pop
de/de/de/pop
/de/de/de/pop
de/de/de/de/pop
/de/de/de/de/pop
de/de/de/de/de/pop
/de/de/de/de/de/pop
de/de/de/de/de/de/pop
⠈ createPagesStatefully/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/pop
/de/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/de/pop
/de/de/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/de/de/pop
/pop
de/pop
/de/pop
de/de/pop
/de/de/pop
de/de/de/pop
/de/de/de/pop
de/de/de/de/pop
/de/de/de/de/pop
de/de/de/de/de/pop
/de/de/de/de/de/pop
de/de/de/de/de/de/pop
⠁ createPagesStatefully/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/pop
/de/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/de/pop
/de/de/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/de/de/pop
/de/de/de/de/de/de/de/de/de/pop
de/de/de/de/de/de/de/de/de/de/pop        (and so on)

pop, is the name of the mdx file.

Steps to reproduce

Expected result

Environment

 System:
    OS: Linux 5.0 Arch Linux undefined
    CPU: (4) x64 Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
    Shell: 5.0.3 - /bin/bash
  Binaries:
    Node: 8.15.0 - ~/.nvm/versions/node/v8.15.0/bin/node
    Yarn: 1.15.2 - /usr/bin/yarn
    npm: 6.4.1 - ~/.nvm/versions/node/v8.15.0/bin/npm
  Languages:
    Python: 3.7.3 - /usr/bin/python
  Browsers:
    Firefox: 66.0.3
  npmPackages:
    gatsby: ^2.3.3 => 2.3.27 
    gatsby-mdx: ^0.4.4 => 0.4.5 
    gatsby-source-filesystem: ^2.0.28 => 2.0.31 
    gatsby-transformer-json: ^2.1.11 => 2.1.11 
  npmGlobalPackages:
    gatsby-cli: 2.5.9
pieh commented 5 years ago

Hey, you are totally right. One way to fix this is to add early return in onCreatePage handler:

exports.onCreatePage = ({ page, actions }) => {
  const { createPage, deletePage } = actions
+
+ if (page.context.locale) {
+   // if locale is already set, don't try to recreate pages again
+   return
+ }

  // First delete the incoming page that was automatically created by Gatsby
  // So everything in src/pages/
  deletePage(page)
pieh commented 5 years ago

/cc @LekoArts