NextJS 图像别名在子目录中的页面上不起作用
NextJS image alias not working on page within sub-directories
我正在尝试为我的图像设置一个别名,这样我就可以 link 它们,而不管我的组件在哪里。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@lib/*": ["lib/*"],
"@images/*": ["images/*"]
}
如您所见,我已经设置了一个别名,尝试了多种方法,甚至包括 public
路径,但是其中 none 似乎有效...
例如,在 {project}/pages/index.tsx
上,我必须 link 图像才能加载:
import Header from '@lib/components/Header';
<Header className="h-128" image="./images/hero.jpg">
...
// Header.tsx
import Image from 'next/image';
import { ReactElement } from 'react';
export interface HeaderProps {
children?: ReactElement | ReactElement[];
className?: string;
image?: string;
}
const Header = ({ children, className, image }: HeaderProps) => {
return (
<section
className={`m-0 flex relative after:shadow-vignette after:content-[''] after:w-full after:h-full after:absolute ${className}`}
>
<div className="absolute h-full w-full z-0">
<Image unoptimized className="z-0" layout="fill" objectFit="cover" src={image} />
</div>
<div className="container text-center m-auto z-10">{children}</div>
</section>
);
};
export default Header;
当我尝试 link 到 {project}/pages/sub-directory/page-two.tsx
内的图像时,这会变得更加严重
compilerOptions.paths
是一个 TypeScript 设置,它不会影响 Next.js 或浏览器加载图像的方式。将这些图像放在 public/images/
中,您可以像现在一样加载它们。
或者导入图像而不是仅仅使用字符串来识别它。
import img from '@images/hero.jpg';
const Asd = () => (
<Image src={img} />
)
应该可以。
我正在尝试为我的图像设置一个别名,这样我就可以 link 它们,而不管我的组件在哪里。
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@lib/*": ["lib/*"],
"@images/*": ["images/*"]
}
如您所见,我已经设置了一个别名,尝试了多种方法,甚至包括 public
路径,但是其中 none 似乎有效...
例如,在 {project}/pages/index.tsx
上,我必须 link 图像才能加载:
import Header from '@lib/components/Header';
<Header className="h-128" image="./images/hero.jpg">
...
// Header.tsx
import Image from 'next/image';
import { ReactElement } from 'react';
export interface HeaderProps {
children?: ReactElement | ReactElement[];
className?: string;
image?: string;
}
const Header = ({ children, className, image }: HeaderProps) => {
return (
<section
className={`m-0 flex relative after:shadow-vignette after:content-[''] after:w-full after:h-full after:absolute ${className}`}
>
<div className="absolute h-full w-full z-0">
<Image unoptimized className="z-0" layout="fill" objectFit="cover" src={image} />
</div>
<div className="container text-center m-auto z-10">{children}</div>
</section>
);
};
export default Header;
当我尝试 link 到 {project}/pages/sub-directory/page-two.tsx
compilerOptions.paths
是一个 TypeScript 设置,它不会影响 Next.js 或浏览器加载图像的方式。将这些图像放在 public/images/
中,您可以像现在一样加载它们。
或者导入图像而不是仅仅使用字符串来识别它。
import img from '@images/hero.jpg';
const Asd = () => (
<Image src={img} />
)
应该可以。