我无法在 Next.js 中引用图像

Pot*_*sys 19 javascript reactjs next.js

我有一个在 Next.js 页面中使用的 React 组件:

/页面/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
Run Code Online (Sandbox Code Playgroud)

在 Main.js 我有以下代码

import macbookIphone from '../../assets/images/mac-iphone.jpg';
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

模块解析失败:意外字符“?” (1:0) 您可能需要一个合适的加载器来处理此文件类型,目前没有配置加载器来处理此文件。请参阅 https://webpack.js.org/concepts#loaders(此二进制文件省略了源代码)

我尝试执行以下操作

next-config.js 中

const withImages = require('next-images')
module.exports = withImages()
Run Code Online (Sandbox Code Playgroud)

我仍然遇到同样的错误。

我究竟做错了什么?

brc*_*-dd 43

从 Next.js v11 开始,您可以执行您正在做的事情,而无需任何额外的配置:

import macbookIphone from '../../assets/images/mac-iphone.jpg';

<Image src={macbookIphone} />

// or

<img src={macbookIphone.src} />
Run Code Online (Sandbox Code Playgroud)

参考:next/image

对于早期版本,如果您希望导入图像而不是将它们放在公共目录中,那么您可以配置file-loaderurl-loader.


Bla*_*umb 16

请参阅 https://nextjs.org/docs/basic-features/static-file-serving

Next.js 可以在根目录中名为 public 的文件夹下提供静态文件,如图像。然后,您的代码可以从基本 URL (/) 开始引用 public 中的文件。


小智 8

至少在我们的项目中,我们对图像使用 require 而不是 import。我们的下一个配置看起来与您的相似。

尝试以下操作,看看是否有帮助:

const macbookIphone = require('../../assets/images/mac-iphone.jpg');
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样使用您的图像作为 src:

<img src={macbookIphone}/>
Run Code Online (Sandbox Code Playgroud)


小智 8

/public/favicon/mail.png

=> "/favicon/mail.png" 会工作


KJ *_*han 5

在 Next.js 中使用图像有点不同:

所有静态资源(例如图像)都必须放置在该public目录中。

  • 如果您的代码位于src目录下,即<app-name>/src/pages , <app-name>/src/components, ...您的 public 文件夹必须位于 src 目录之外。公共文件夹不能位于 src 下,因为<app-name>/src/public. 在这种情况下,您的公共目录必须位于<app-name>/public.

  • 如果你的代码不在src目录下,即<app-name>/pages, <app-name>/components, ...你的 public 目录应该在<app-name>/public

排序后,直接引用<Image />组件中提供的文件,next/image如下所示:

import Image from "next/image"
<Image src="/sample-image.png" width="64" height="64" />
Run Code Online (Sandbox Code Playgroud)

或者

import Image from "next/image"
import sampleImage from "<file-path>"

<Image src={sampleImage} width="64" height="64" />
Run Code Online (Sandbox Code Playgroud)

前提是您在public/sample-image.png下有一个文件

如果您有图像 URL,请直接将其提供给 'src' 属性。

在以下位置查找与布局相关的描述性示例: https: //github.com/vercel/next.js/tree/canary/examples/image-component

参考:

  1. https://nextjs.org/docs/basic-features/static-file-serving
  2. https://nextjs.org/docs/api-reference/next/image
  3. https://nextjs.org/docs/basic-features/image-optimization
  4. https://nextjs.org/docs/advanced-features/src-directory