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" />
我有一个包含旧版本 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" />