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

IT技术 javascript reactjs next.js
2021-03-24 07:11:27

我有一个在 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

在 Main.js 我有以下代码

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

我收到以下错误

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

我尝试执行以下操作

next-config.js 中

const withImages = require('next-images')
module.exports = withImages()

我仍然遇到同样的错误。

我究竟做错了什么?

6个回答

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

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

你好。您知道如何将 Public 文件夹中的内容获取到动态页面中,即 - dynamic[id].js 吗?
2021-06-01 07:11:27

/public/favicon/mail.png

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

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

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

const macbookIphone = require('../../assets/images/mac-iphone.jpg');

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

<img src={macbookIphone}/>
不幸的是它没有奏效。似乎没有任何效果。
2021-06-05 07:11:27
你好。您知道如何将 Public 文件夹中的内容获取到动态页面中,即 - dynamic[id].js 吗?
2021-06-21 07:11:27

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

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

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

  • 如果你的代码是不是的src目录,也就是<app-name>/pages, <app-name>/components, ...那么你的公共目录应该是下<app-name>/public

排序后,直接引用<Image />组件中提供的文件next/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' props。

在以下位置找到与布局相关的描述性示例: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

从 Next.js v11 开始,你可以在没有任何额外配置的情况下做你正在做的事情:

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

<Image src={macbookIphone} />

// or

<img src={macbookIphone.src} />

参考: next/image

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