vue3+vite 动态引用静态资源,动态引入assets文件夹图片的几种方式

这里我们先假设:
静态文件目录:src/assets/images/
我们的目标静态文件在: src/assets/images/home/home_bg.png

<img :src="require('@/assets/images/home/home_bg.png')" />

 通过require动态引入, 发现报错:require is not defind,这是因为 require 是属于 Webpack 的方法

第一种方式(适用于单个资源文件) 

import homeBg from 'src/assets/images/home/home_bg.png'

<img :src="homeBg" />

 第二种方式(适用于多个资源文件,动态传入文件路径)

 new URL() + import.meta.url

 在src目录下创建一个util文件夹,文件夹里创建一个utils.ts文件

// 获取assets静态资源
const getAssetsFile = (url: string) => {
  return new URL(`../assets/images/${url}`, import.meta.url).href;
};

export default {
  getAssetsFile,
};

 在vue文件中导入

<script setup lang="ts">
 import util from 'src/util/utils'
</script>

使用方式

<template>
 <img class="bg-img" :src="util.getAssetsFile('bg.png')" alt="">
</template>

第三种方式(适用于多个资源文件,这种方式引入的文件必须指定到具体文件夹路径,传入的变量中只能为文件名,不能包含文件路径)

 例如在assets/images文件下还有一个home文件夹

// 获取assets静态资源
const getAssetsFile = (url: string) => {
  const path = `../assets/images/home/${url}`;
  const modules = import.meta.glob("../assets/images/home/*");
  return modules[path].default;
};

export default {
  getAssetsFile,
};
<script setup lang="ts">
 import util from 'src/util/utils'
</script>
<template>
 <img class="bg-img" :src="util.getAssetsFile('bg.png')" alt="">
</template>

如果是背景图片引入的方式(一定要使用相对路径)

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

猜你喜欢

转载自blog.csdn.net/weixin_43743175/article/details/125892613