六维教程

Nuxt4 静态资源

Nuxt 里「图片、字体、图标、全局 CSS」这些不随页面变化的文件叫静态资源。它们放错目录,轻则路径写错,重则打包时找不到文件。本篇讲清两个目录的区别和正确用法。

public 与 assets 的区别

Nuxt 约定了两个目录,职责完全不同。

  • public/ 里的文件会被原样拷贝到构建产物根目录,访问时用根路径 /文件名。适合放 favicon、robots.txt、已经处理好的大图等「需要按固定 URL 直接访问」的文件。
  • assets/ 里的文件会经过打包工具处理(压缩、哈希命名、按需收集),适合放被组件 import 的图片、字体、Sass 源码等资源。

一句话总结:别人要通过固定 URL 直接访问的放 public/,被代码引用、需要打包优化的放 assets/

public 目录的用法

把文件放进 public/,直接写根路径即可,不需要写相对路径。

<!-- 站点图标,浏览器自动请求 /favicon.ico -->
<link rel="icon" href="/favicon.ico">

<!-- 一张已有的图片 -->
<img src="/logo.png" alt="logo">

robots.txt、站点地图这类文件也要放 public/,部署后访问 /robots.txt 就能拿到。在 网站配置篇 里引用 favicon,用的也是这个 /favicon.ico 根路径。

assets 目录的用法

在组件里用 import~ / @ 别名引用 assets/ 下的文件。

<script setup>
// ~ 指向项目根目录,Nuxt 会自动处理这张图片
import logo from '~/assets/logo.png'
</script>

<template>
  <img :src="logo" alt="logo">
</template>

~@ 都指向项目根目录,~/assets/...@/assets/... 等价。这样引用的图片会被打包工具处理,文件名变成带哈希的版本,利于浏览器缓存。

在 CSS 里引用

CSS 中也可以用 ~ 别名引用 assets/ 下的文件。

.hero {
  background-image: url('~/assets/bg.png');
}

全局 CSS 写在 nuxt.config.tscss 配置里(见网站配置篇),局部样式直接写在组件的 <style> 中即可。

图片优化(进阶)

Nuxt 官方提供 @nuxt/image 模块,能自动做尺寸调整、格式转换(WebP)、懒加载。需要图片优化时再引入,新手阶段先用上面的基础方式就够。

记住核心区别即可:固定 URL 能直接访问的放 public/,被代码 import 要打包的放 assets/

上一篇
Nuxt4 页面与组件
下一篇
Nuxt4 插件