React中Next.js静态资源与public目录示例详解

 更新时间:2026年03月06日 08:24:44   作者:dbt@L  
React作为当前前端开发领域最流行的框架之一,组件化开发是其核心概念之一,下面这篇文章主要介绍了React中Next.js静态资源与public目录的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

问题场景

部署 Next.js 应用后,发现所有图片都显示不出来,页面上一片空白图标。本地开发明明是好的,为什么部署后就不行了?

理解 Next.js 的构建产物

Next.js 使用 output: 'standalone' 模式构建时,会生成一个独立的部署包:

.next/
└── standalone/        ← 部署包
    ├── server.js      ← 启动文件
    ├── node_modules/  ← 精简的依赖
    └── .next/         ← 编译后的代码

问题来了public 目录和 .next/static 目录不会自动包含进去!

public 目录是什么?

public 目录用于存放静态资源,如图片、字体、favicon 等:

project/
├── public/
│   ├── images/
│   │   ├── logo.png
│   │   └── banner.jpg
│   ├── fonts/
│   │   └── custom.woff2
│   └── favicon.ico
└── src/

在代码中可以直接用根路径引用:

// 引用 public/images/logo.png
<img src="/images/logo.png" alt="Logo" />

// 引用 public/favicon.ico
<link rel="icon" href="/favicon.ico" rel="external nofollow"  />

为什么部署后图片不显示?

使用 standalone 模式时,官方文档明确说明:

public.next/static 目录需要手动复制到 standalone 目录

构建后需要手动操作:

# 构建
npm run build

# 复制静态资源(必须!)
cp -r public .next/standalone/public
cp -r .next/static .next/standalone/.next/static

目录结构对比

错误的部署包(缺少静态资源)

.next/standalone/
├── server.js
└── .next/
    └── server/     ← 只有服务端代码

正确的部署包

.next/standalone/
├── server.js
├── public/           ← 手动复制
│   └── images/
│       └── logo.png
└── .next/
    ├── server/
    └── static/       ← 手动复制
        └── chunks/

使用 Docker 时的处理

如果用 Docker 部署,需要在 Dockerfile 中添加复制步骤:

FROM node:18-alpine

WORKDIR /app

# 复制构建产物
COPY .next/standalone ./

# 复制静态资源(关键步骤!)
COPY public ./public
COPY .next/static ./.next/static

EXPOSE 3000
CMD ["node", "server.js"]

使用脚本自动化

可以写一个部署脚本自动处理:

#!/bin/bash

# 1. 构建
npm run build

# 2. 复制静态资源到 standalone
cp -r public .next/standalone/public
cp -r .next/static .next/standalone/.next/static

# 3. 打包部署
cd .next/standalone
tar -czf deploy.tar.gz .

echo "部署包已生成: .next/standalone/deploy.tar.gz"

static 和 public 的区别

目录内容来源
public/原始静态资源开发者手动放入
.next/static/编译后的 JS/CSSNext.js 构建生成

两者都需要复制,缺一不可:

  • public → 图片、字体不显示
  • .next/static → 页面样式和交互失效

常见问题排查

1. 图片路径正确但不显示

检查 standalone/public 目录是否存在且包含图片文件。

2. 本地正常,部署后异常

确认部署流程是否包含复制静态资源的步骤。

3. 部分图片显示,部分不显示

检查图片文件名是否有特殊字符或中文,建议使用英文命名。

总结

步骤说明
1npm run build 构建项目
2复制 publicstandalone/public
3复制 .next/staticstandalone/.next/static
4部署 standalone 目录

记住这个口诀:standalone 模式,静态资源要手动复制。这是 Next.js 官方设计,目的是让部署包尽可能精简,由开发者按需添加资源。

到此这篇关于React中Next.js静态资源与public目录的文章就介绍到这了,更多相关React中Next.js与public内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React Native之TextInput组件解析示例

    React Native之TextInput组件解析示例

    本篇文章主要介绍了React Native之TextInput组件解析示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 详解使用create-react-app添加css modules、sasss和antd

    详解使用create-react-app添加css modules、sasss和antd

    这篇文章主要介绍了详解使用create-react-app添加css modules、sasss和antd,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 一文带你了解React中的并发机制

    一文带你了解React中的并发机制

    React 18.2.0 引入了一系列并发机制的新特性,旨在帮助各位开发者更好地控制和优化应用程序的性能和用户体验,下面我们就来看看如何利用这些新特性构建更高效、更响应式的应用程序吧
    2024-03-03
  • react结合bootstrap实现评论功能

    react结合bootstrap实现评论功能

    这篇文章主要为大家详细介绍了react结合bootstrap实现评论功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • React实现随机颜色选择器的示例代码

    React实现随机颜色选择器的示例代码

    颜色选择器是一个用于选择和调整颜色的工具,它可以让用户选择他们喜欢的颜色,本文主要介绍了React实现随机颜色选择器的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 浅谈React多个setState会调用几次

    浅谈React多个setState会调用几次

    在React的生命周期钩子和合成事件中,多次执行setState,会被调用几次,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-11-11
  • 实例讲解React 组件

    实例讲解React 组件

    这篇文章主要介绍了React 组件的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 详解React如何优雅地根据prop更新state值

    详解React如何优雅地根据prop更新state值

    这篇文章主要为大家详细介绍了React如何优雅地实现根据prop更新state值,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • 在React中编写样式的六种方式

    在React中编写样式的六种方式

    在React中,编写样式主要有以下几种方式,内联样式,外部样式表,CSS Modules,Styled Components,Emotion和Radium这六种样式,下面我将针对上面提到的6种方式给出详细的代码示例,需要的朋友可以参考下
    2024-01-01
  • 基于json-render的流式表单渲染方案详细解析

    基于json-render的流式表单渲染方案详细解析

    json-render是由vercel开源的一项前沿技术,旨在应对ai自动生成ui过程中常见的不可控性难题,这篇文章主要介绍了基于json-render的流式表单渲染方案的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-06-06

最新评论