Zeit Now路由问题。重新加载索引页面以外的页面时,找不到404错误

最近,我在Themeforest上购买了Next.js模板,然后尝试将其部署到Zeit Now。

这是一个使用Lerna和Yarn工作区的monorepo。 Next.js应用程序的代码位于packages/landing文件夹内

索引页(位于/路由的页面)一切都很好,我可以毫无问题地重新加载它。

当我尝试在pages文件夹中添加新页面时出现问题。例如/privacy-policy/terms-of-service,...

如果我通过索引页面中的<Link />浏览这些页面,则效果很好。但是,如果我尝试重新加载这些页面或向我的用户发送直接链接到他们,则他们将无法访问这些页面。而是,我的用户将看到404 NOT FOUND。

转到此页面https://superprops-2-r09pdhfab.now.sh/,您可以明白我的意思。重新加载时效果很好。

但是,如果您打开此页面https://superprops-2-r09pdhfab.now.sh/saas,则会看到404(/saas的代码也已部署)

在我的localhost开发中,重新加载时它对所有页面都适用。因此,我认为问题出在Zeit Now配置中。

这是now.json中的代码:

{
  "version": 2,"builds": [
    { "src": "packages/landing/package.json","use": "@now/static-build" }
  ],"routes": [
    {
      "src": "/(.*)","dest": "/packages/landing/$1","headers": {
        "x-request-path": "$1"
      }
    }
  ]
}

如何解决此问题?谢谢。

liuchangqi 回答:Zeit Now路由问题。重新加载索引页面以外的页面时,找不到404错误

事实证明,Themeforest中的模板正在使用具有旧配置的Monorepo,而该旧配置已与“现在零配置”不再兼容。

所以我的解决方案是创建一个新的Next.js项目,复制所有代码并按如下所示更新next.config.js。

这部分config.resolve.modules.push(path.resolve('./'));使我不必更改任何导入语句。

const path = require('path');
const withPlugins = require('next-compose-plugins');
const withOptimizedImages = require('next-optimized-images');
const withFonts = require('next-fonts');
const withCSS = require('@zeit/next-css');
module.exports = withPlugins(
  [
    [
      withOptimizedImages,{
        mozjpeg: {
          quality: 90
        },webp: {
          preset: 'default',quality: 90
        }
      }
    ],withFonts,withCSS
  ],{
    webpack(config) {
      // Here is the magic
      // We push our config into the resolve.modules array
      config.resolve.modules.push(path.resolve('./'));
      return config;
    }
  }
);

本文链接:https://www.f2er.com/2546577.html

大家都在问