Reactjs 盖茨比没有生成正确的静态HTML文件

Reactjs 盖茨比没有生成正确的静态HTML文件,reactjs,gatsby,Reactjs,Gatsby,我在一个盖茨比的网站上工作,该网站到目前为止发展顺利。但在为生产构建时遇到了一个问题,即我们在各种页面索引文件中没有任何静态html,相反,看起来盖茨比将尝试从javascript注入页面,这与我们的预期相反 我看过一些关于盖茨比离线插件的帖子,我已经禁用了该插件,但这并没有解决问题。我们的页面不包含静态html输出,我希望注入的元内容也不存在 对于如何调试构建,以查看重置静态输出并用动态生成的Gatsby引导代码替换它的内容,是否有任何建议 用于该站点的插件包括: 插件:[ `盖茨比`, `

我在一个盖茨比的网站上工作,该网站到目前为止发展顺利。但在为生产构建时遇到了一个问题,即我们在各种页面索引文件中没有任何静态html,相反,看起来盖茨比将尝试从javascript注入页面,这与我们的预期相反

我看过一些关于盖茨比离线插件的帖子,我已经禁用了该插件,但这并没有解决问题。我们的页面不包含静态html输出,我希望注入的元内容也不存在

对于如何调试构建,以查看重置静态输出并用动态生成的Gatsby引导代码替换它的内容,是否有任何建议

用于该站点的插件包括:

插件:[
`盖茨比`,
`盖茨比变压器,
`盖茨比,
{
解析:`gatsby插件清单`,
选项:{
名称:`gatsby starter default`,
短名称:`starter`,
起始url:`/`,
背景颜色:“663399”,
主题颜色:“663399”,
显示:`minimal ui`,
图标:`src/images/favicon.png`,//此路径相对于站点的根目录。
},
},
`盖茨比变压器,
{
解析:`gatsby源文件系统`,
选项:{
名称:'数据',
路径:`${uu dirname}/src/data/`,
},
},
{
解析:`gatsby源文件系统`,
选项:{
名称:`images`,
路径:`${uu dirname}/src/images`,
},
},
`盖茨比插件式组件`,
//此(可选)插件支持渐进式Web App+脱机功能
//要了解更多信息,请访问:https://gatsby.dev/offline
//`盖茨比插件离线`,
{
解析:'gatsby插件根导入',
选项:{
src:path.join(uu dirname,'src'),
pages:path.join(uu dirname,'src/pages'),
images:path.join(uu dirname,'src/images'),
},
},
`盖茨比插件转换链接`,
{
解析:`gatsby插件google analytics`,
选项:{
trackingId:process.env.GOOGLE\u ANALYTICS\u TRACKING\u ID,
头:是的,
},
},

]
我成功地追踪到了Redux(Redux persist)和Gatsby SSR之间的冲突,特别是与PersistGate元素的使用有关。下面是一个非常常见的模式,在gatsby browser和gatsby ssr中有以下内容

export { default as wrapRootElement } from 'src/store/ReduxWrapper';
哪个ReduxWrapper将包含以下内容:

export default ({ element }) => (
  <Provider store={store}>
    <PersistGate loading={<h2>Loading...</h2>} persistor={persistor}>
      {element}
    </PersistGate>
  </Provider>
);
ReduxsrWrapper将包含以下内容,基本上是对PersistGate的删除:

export default ({ element }) => (
  <Provider store={store}>
    {element}
  </Provider>
);
导出默认值({element})=>(
{element}
);
也有同样的问题

看来,这门打破了ssr。因为ssr是在构建期间完成的,我们不需要它,所以我们可以检查我们的环境

将provider.js的包装从1更改为
wrap。到2。成功了

import React from "react"
import { Provider } from "react-redux"
import { PersistGate } from 'redux-persist/integration/react'

import {store, persistor} from "./src/redux/store"
1:

导出默认值({element})=>(
{element}
)
2:

导出默认值({element})=>{
如果(窗口类型==“未定义”){
返回(
{element}
)
}
返回(
{element}
)
}

您是否能够在
上展开与我们预期相反的内容
?盖茨比应该生成一个静态版本的页面。例如,如果我有一个about页面,它将呈现为about一堆内容,那么当我运行Gatsby构建时,原始标记应该出现在相关的/about/index.html文件中。这种情况不会发生,生成文件中唯一的html元素是顶层。此外,我们希望react Healmet注入的SEO元内容都不存在。您是否
gatsby clean
+
gatsby build
+
gatsby serve
gatsby develope
并不总是创建页面的所有部分,您可以使用
gatsby build
看到这些部分。如果您没有看到React头盔meta标记,我相信配置有误。当我
gatsby build
时,我在我的项目中看到了它们。这是我们问题的关键,gatsby build没有生成包含静态html或meta标记的页面。该网站的作品在开发,甚至从盖茨比服务,但没有完全水合网页,我们需要搜索引擎优化,我们无法确定在安装插件或配置有相同的问题突破。你发现什么了吗?当我使用此解决方案时,我得到了重复的内容?
import React from "react"
import { Provider } from "react-redux"
import { PersistGate } from 'redux-persist/integration/react'

import {store, persistor} from "./src/redux/store"
export default ({ element }) => (
  <Provider store={store}>
    <PersistGate loading={null} persistor={persistor}>
      {element}
    </PersistGate>
  </Provider>
)
export default ({ element }) => {
  if (typeof window === "undefined") {
    return (
      <Provider store={store}>
        {element}
      </Provider>
    )
  }
  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        {element}
      </PersistGate>
    </Provider>
  )
}