【问题标题】:Gatsby build time error - WebpackError: TypeError: isRedirect is not a functionGatsby 构建时错误 - WebpackError: TypeError: isRedirect is not a function
【发布时间】:2022-01-08 13:05:01
【问题描述】:

自从我在 login.js

上尝试使用受保护的路由
    <Router basepath="/">
            <PrivateRoute path="/edit" />
        </Router>

这在 edit.js

useEffect(() => {
    // ... some code here

    getEscritos();
    if (!user && location.pathname !== `/login`) {
        navigate("/login");
        return null;
    }
}, []);

我无法再构建它...错误是:

窗口未定义

虽然在本地运行良好。一切正常。

然后我在研究后在 gatsby-node.js 上尝试了这个

exports.onCreateWebpackConfig = ({ stage, loaders, 
actions, getConfig }) => {
if (stage === "build-html" || stage === "develop-html") {
actions.setWebpackConfig({
  module: {
    rules: [
      {
        test: /reach-router/,
        use: loaders.null(),
      },
    ],
  },
});
externals: getConfig().externals.concat(function (
  context,
  request,
  callback
) {
  const regex = /^@?firebase(\/(.+))?/;
  // exclude firebase products from being bundled, so 
  they will be loaded using require() at runtime.
  if (regex.test(request)) {
    return callback(null, "commonjs " + request); // <- 
   use commonjs!
    }
  callback();
  });
 }

};

现在的错误是:

WebpackError: TypeError: isRedirect 不是函数

我不知道该怎么办......

这里是repo,如果有帮助的话。

提前感谢您的宝贵时间。

【问题讨论】:

    标签: webpack build gatsby reach-router


    【解决方案1】:

    您需要将您的 Firebase 使用和初始化包装在以下条件中:

    if(typeof window !== 'undefined')
    

    您在 SSR 中触发了多个 Firebase 实例(服务器端渲染。

    应用在你的escritos.js:

      if(typeof window !== 'undefined'){
        const db = getFirestore(app);
        const escritosColRef = collection(db, "escritos");
      }
    

    同样适用于index.js (line 31) 等等...

    useEffect 钩子内的引用(带有空的deps[])应该在没有window 条件的情况下工作,因为它们是在加载 DOM 树时触发的,因此不会破坏 SSR .如果错误仍然存​​在,请尝试包装它们。

    【讨论】:

    • 我按照你的建议把它们都包起来了。现在的错误是:“未定义用户”、“未定义 q”以及在本地运行时出现的三个或四个以上错误。
    • 这个想法不是复制粘贴和祈祷xD。通过使用条件包装 Firebase 引用的想法是避免在 SSR 中加载 Firebase,这会导致您的问题。如果在您的实现中有更多的变量在 Firebase 准备就绪后被加载,它们也应该被添加到条件中。我建议,在最新版本的 Firebase (9) 中,摆脱 onCreateWebpackConfig 配置,直到您发现确实需要它。
    • :))))))) 尽管如此,我还是会祈祷。我已经摆脱了onCreateWebpackConfig。我会尽快继续努力。谢谢。
    • 经过多次尝试和祈祷,感谢您的帮助,问题不在于 firebase,而在于 jodit。但是我用jodit应用了你的答案(尽管使用onCreateWebpackConfig)并且它起作用了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-12-13
    • 2018-04-06
    • 1970-01-01
    • 2014-07-23
    • 2015-11-01
    • 2021-08-20
    • 2019-07-20
    • 2021-08-01
    相关资源
    最近更新 更多