Vite项目打包后图片等资源丢失的解决方案

本篇文章主要解决Vue 项目打包后浏览器页面空白中提到的vite项目打包后成功显示内容,但是丢失图片等资源的情况。

想直接看解决方法的可以查看文档底部的“解决方法”

项目中引入图片的方式

一般来说在vite项目中是通过 import 来导入图片的。

import ImageSrc from '@/assets/image.png'

这样子引入完全没有问题,一般情况下也不会出现打包后图片资源丢失的问题。但是有时候,我们也想通过变量来引入图片。

const imagePath = "@/assets/image.png";
const ImageSrc = import(imagePath);

或者是

const imageName = "image.png";
const ImageSrc = import("@/assets/" + imageName);

然而这两种方式,不说是在打包后无法显示,在开发过程中也是无法显示的,最开始我也遇到这个问题,在网上找了许多教程,最后发现只需要按照下面写的方式,就可以正常显示。

<script setup>
const imageName = "image.png";
</script>
<template>
    <img :src="`/src/assets/${imageName}`"></img>
</template>

但是这样写的话,图片可以在开发过程中显示,但打包后依旧不显示。

从浏览器“开发者工具”中可以看到,正常显示的图片名称后边经过了 hash(哈希),并且路径经过了处理,无法显示的图片路径则与源代码中的路径相同,没有经过处理。

现在有两种方法解决问题:

  1. 处理图片路径,使其正常显示
  2. 修改其他内容,使不处理的图片路径也能正常显示

查看Vite 官方文档中关于 public 部分的内容。

Vite 官方文档 – 静态资源处理 – public 目录

通过上面的“开发者工具”可以看到图片的名字并没有被改变,这符合文档中所说的“必须保持原有文件名(没有经过 hash)”。

解决方法

将我们项目中根据变量导入的文件放到项目根目录下的 public 文件夹内,然后将变量前加上 './',注意这里的 ./ 是字符串,需要加引号。

<script setup>
const imageName = "image.png";
</script>
<template>
    <img :src="'./' + imageName"></img>
</template>

如此图片便可以正常显示。

滚动至顶部