Nextjs assets 404 Not Found when using dynamic rouitng while ssr 时找不到

Nextjs assets 404 Not Found when using dynamic rouitng while ssr

我有一个包含旧版本 nextjs 的静态文件夹。我更新了 nextjs 以使用 public 文件夹。

"next": "^9.4.0",
"react": "^16.13.1",
"react-dom": "^16.13.1",

这是我的 nextjs 配置:

const withPlugins = require('next-compose-plugins');
const withCss = require('@zeit/next-css');
const withSass = require('@zeit/next-sass');
const withImages = require('next-images');
require('dotenv').config();
const withSourceMaps = require('@zeit/next-source-maps')();

if (typeof require !== 'undefined') {
  // eslint-disable-next-line no-unused-vars
  require.extensions['.css'] = file => {};
}

const nextConfig = {
  env: {
    BUILD_ENV: process.env.BUILD_ENV,
  },
  webpack: (config, { isServer }) => {
    if (!isServer) {
      // eslint-disable-next-line no-param-reassign
      config.resolve.alias['@sentry/node'] = '@sentry/browser';
    }

    if (isServer) {
      const antStyles = /antd\/.*?\/style\/css.*?/;
      const origExternals = [...config.externals];
      config.externals = [ // eslint-disable-line
        (context, request, callback) => { // eslint-disable-line
          if (request.match(antStyles)) return callback();
          if (typeof origExternals[0] === 'function') {
            origExternals[0](context, request, callback);
          } else {
            callback();
          }
        },
        ...(typeof origExternals[0] === 'function' ? [] : origExternals),
      ];

      config.module.rules.unshift({
        test: antStyles,
        use: 'null-loader',
      });
    }
    return config;
  },
};

module.exports = withPlugins(
  [
    [withImages],
    [withCss],
    [
      withSass,
      {
        cssModules: true,
        cssLoaderOptions: {
          localIdentName: '[path]___[local]___[hash:base64:5]',
        },
      },
    ],
    [withSourceMaps],
  ],
  nextConfig,
);

当我刷新页面时,我所有的样式都是这样的:

我有一个名为 [cat] 动态页面 ,所以所有路径如下:

http://localhost:3030/cat/static/css/antd.min.css

你知道我该如何解决这个问题吗?

当我使用 Link 进行路由时,一切正常,但是当我刷新页面时,由于动态路由,找不到资产!

这是目录:

我有一个类似的问题,我使用 Next.js Dynamic Routes 来捕获 URL 路径参数,但是 CSS 和 JS 资产不会加载,因为它把路径放在我的前面布局资产。即在您的示例中,它会在我的资源文件路径前添加 cat 。我的 pages 看起来类似于:pages/cats/[something].js

我通过在资源路径中添加“/”来修复此问题

尝试更正您的 Head/Layout

来自:

<link rel="stylesheet" href="static/css/antd.min.css" />

至:

<link rel="stylesheet" href="/static/css/antd.min.css" />

这解决了我的 CSS 和 JS 在显示和从正确的资源路径中提取问题 link。

我只需要将 src 的值从

更改为
<img src="static/images/insta-1.jpg" alt="Insta1" width="83" height="83" />

<img src="/static/images/insta-1.jpg" alt="Insta1" width="83" height="83" />

不知道为什么,但是 Nextjs 在动态路由时不能使用他们自己的图像组件。

旧的 html img 标签对我有用

<img src={${e.image.url}} alt="punkies y cerebro showcase" />