[英]I can't reference an image in Next.js
我有一个在 Next.js 页面中使用的 React 组件:
/pages/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Layout from "../src/hoc/Layout/Layout";
import Main from "../src/components/Main/Main";
const Index = () => (
<Layout>
<Main />
</Layout>
);
export default Index
在 Main.js 中,我有以下代码
import macbookIphone from '../../assets/images/mac-iphone.jpg';
我收到以下错误
模块解析失败:意外字符 '�' (1:0) 您可能需要适当的加载程序来处理此文件类型,目前没有配置加载程序来处理此文件。 请参见https://webpack.js.org/concepts#loaders (此二进制文件省略了源代码)
我尝试执行以下操作
在next-config.js 中
const withImages = require('next-images')
module.exports = withImages()
我仍然遇到同样的错误。
我究竟做错了什么?
请参阅https://nextjs.org/docs/basic-features/static-file-serving
Next.js 可以在根目录中名为 public 的文件夹下提供静态文件,如图像。 然后,您的代码可以从基本 URL (/) 开始引用 public 中的文件。
至少在我们的项目中,我们对图像使用 require 而不是 import。 我们的下一个配置看起来与您的相似。
尝试以下操作,看看是否有帮助:
const macbookIphone = require('../../assets/images/mac-iphone.jpg');
然后,您可以像这样使用您的图像作为 src:
<img src={macbookIphone}/>
/public/favicon/mail.png
=> "/favicon/mail.png" 会工作
在 Next.js 中使用图像有点不同:
所有静态资产(如图像)都必须放在public
目录中。
如果您的代码在src目录下,即<app-name>/src/pages , <app-name>/src/components, ...
那么您的公共文件夹必须在 src 目录之外。 公共文件夹不能作为<app-name>/src/public.
在 src 下<app-name>/src/public.
在这种情况下,您的公共目录必须位于<app-name>/public
。
如果你的代码不在src目录下,即<app-name>/pages, <app-name>/components, ...
那么你的 public 目录应该在<app-name>/public
排序后,直接引用next/image
提供的<Image />
组件中的文件为:
import Image from "next/image"
<Image src="/sample-image.png" width="64" height="64" />
要么
import Image from "next/image"
import sampleImage from "<file-path>"
<Image src={sampleImage} width="64" height="64" />
如果您在public/sample-image.png下有一个文件
如果您有图片 URL,请直接将其提供给 'src' 道具。
在以下位置找到与布局相关的描述性示例: https : //github.com/vercel/next.js/tree/canary/examples/image-component
参考:
您可以使用next-images
导入next-images
第1步
npm install --save next-images
要么
yarn add next-images
第2步
// Create next.config.js
const withImages = require('next-images')
module.exports = withImages()
对于打字稿
// Add following line in next-env.d.ts
/// <reference types="next-images" />
重新启动您的服务器,现在您可以导入您的图像,例如
import img1 from "assets/images/cover_images/blog_1.png"
从 Next.js v11 开始,你可以在没有任何额外配置的情况下做你正在做的事情:
import macbookIphone from '../../assets/images/mac-iphone.jpg';
<Image src={macbookIphone} />
// or
<img src={macbookIphone.src} />
参考: next/image
对于早期版本,如果您希望导入图像而不是将它们放在公共目录中,那么您可以配置file-loader
或url-loader
。
它像这样对我有用,但将文件放在公共文件夹中:
<图片宽度={150} 高度={100} src={'/punkieslogo.png'} alt="作者图片" />
您不能像在 React.js 中那样访问 Next.js 中的图像,除非它们存储在“公共”文件夹中。
这很简单。
<Image
src="/profile_banner.jpg"
alt="cover picture"
layout="fill"
/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.