Vue3学习:vite项目中图片不能显示,报错 require is not defined

news2024/10/23 23:24:02

今天做了一个案例“给你喜欢的人送花”,如果喜欢谁,就给谁送花,最多可以送5朵。运行效果如下。
图1
这个项目是使用 npm create vite@latest 命令创建的。
包括2个组件:

  • 根组件App.vue
  • 子组件HelloVote.vue。
    目录结构如图所示:
    图2
    然而在运行这个项目的时候,却出现了问题,App.vue中4张图片不能正常显示。
<template>
	<div class="wrapper">
		<h2>给你喜欢的人送花</h2>
		<ul>
			<li v-for="(item, index) in list" :key="index">
				<div class="imgvote">
					<img :src="item.poet" :alt="item.name">
				</div>
				<HelloVote :sendto="item.name">喜欢</HelloVote>
			</li>
		</ul>
	</div>
</template>

对应的JavaScript中,代码为

data(){
  return{
	list: [
				{ poet: require('./assets/liu.png'), name: '柳永', },
				{ poet: require('./assets/su.png'), name: '苏轼', },
				{ poet: require('./assets/xin.png'), name: '辛弃疾', },
				{ poet: require('./assets/li.png'), name: '李清照', },
			]
	]
  }
}

查看控制台,报错" require is not defined",require未定义。

在这里插入图片描述

于是到网上一通搜索,找到几篇文章,说是vite不支持require,要想使其支持,需要安装一个插件,还需要修改一些对应的配置文件。
安装插件简单,执行对应的命令即可。可是配置文件那里我有些看不明白,不知道该从哪里修改,甚至不知道配置文件具体是哪个。
后来又找到一篇文章,文中提到的方法不需要安装插件,不需要修改配置文件,只需要换种写法,不用require即可。我照做,果然问题解决,图片正常显示。
修改后的代码如下:


	data() {
		return {
			list: [
				{ poet: new URL(`./assets/liu.png`, import.meta.url).href, name: '柳永', },
				{ poet: new URL(`./assets/su.png`, import.meta.url).href, name: '苏轼', },
				{ poet: new URL(`./assets/xin.png`, import.meta.url).href, name: '辛弃疾', },
				{ poet: new URL(`./assets/li.png`, import.meta.url).href, name: '李清照', },
			],
		}
	},

修改前后对比:

//修改前
{ poet: require('./assets/liu.png'), name: '柳永', },
//修改后
{ poet: new URL(`./assets/liu.png`, import.meta.url).href, name: '柳永', }, 

new URL()这里使用了模板字符串,在本例中,使用普通的单引号或双引号字符串也可以。
只不过模板字符串可以支持动态URL。例如:

function getImageUrl(person) {
  return new URL(`./assets/${person}.png`, import.meta.url).href
}

这种解决方法来源于vite官网(https://vitejs.cn/vite5-cn/guide/assets.html),感兴趣的话可以前往查看,这是vite官网的部分截图。

在这里插入图片描述

案例完整的代码如下:

一、App.vue

<script>
import HelloVote from './components/HelloVote.vue'
export default {
	data() {
		return {
			list: [
				{ poet: new URL('./assets/liu.png', import.meta.url).href, name: '柳永', },
				{ poet: new URL('./assets/su.png', import.meta.url).href, name: '苏轼', },
				{ poet: new URL("./assets/xin.png", import.meta.url).href, name: '辛弃疾', },
				{ poet: new URL(`./assets/li.png`, import.meta.url).href, name: '李清照', },
			],
			// list: [
			// 	{ poet: require('./assets/liu.png'), name: '柳永', },
			// 	{ poet: require('./assets/su.png'), name: '苏轼', },
			// 	{ poet: require('./assets/xin.png'), name: '辛弃疾', },
			// 	{ poet: require('./assets/li.png'), name: '李清照', },
			// ],
		}
	},
	components: {
		HelloVote,
	},
}
</script>
<template>
	<div class="wrapper">
		<h2>给你喜欢的人送花</h2>
		<ul>
			<li v-for="(item, index) in list" :key="index">
				<div class="imgvote">
					<img :src="item.poet" :alt="item.name">
				</div>
				<HelloVote :sendto="item.name">喜欢</HelloVote>
			</li>
		</ul>
	</div>
</template>
<style scoped>
ul,
li {
	list-style: none;
}

.wrapper {
	width: 80vw;
	margin: 0 auto;
	display: flex;
	justify-content: center;
	flex-direction: column;
}

.wrapper ul {
	display: flex;
	justify-content: space-between;
}

h2 {
	text-align: center;
}

.wrapper li {
	text-align: center;
}

.imgvote {
	width: 16vw;
	height: 20vw;
	margin-bottom: 1rem;
}

.imgvote img {
	width: 100%;
	height: 100%;
	border: 1px solid #ccc;
}
</style>

二、HelloVote.vue

<script>
export default {
    data() {
        return {
            count: 0,
        }
    },
    props: ['sendto'],
    methods: {
        onClick() {
            if (this.count < 5) {
                this.count++;
            }
        }
    },
}
</script>
<template>
    <div>
        <button class="btn" @click="onClick">
            <slot></slot>{{ sendto }}
        </button>
        <span>🌹x{{ count }}</span>
    </div>
</template>
<style scoped>
.btn {
    border: 1px solid #ccc;
    padding: 5px;
    border-radius: 5px;
    cursor: pointer;
    outline: none;
    font-size: 16px;
    width: 110px;
}

.btn:hover {
    background-color: #ff8400;
    color: #fff;
}
</style>

三、main.js

import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2221952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日&#xff0c;财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…

基于SSM+微信小程序的家庭记账本管理系统(家庭1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、管理员端功能有首页、个人中心、用户管理&#xff0c;消费详情管理、收入详情管理、系统管理等。 2、用户端功能有首页、消费详情、收入详情、论坛信息、我的等功能。 2、项目技术 …

数据结构作业day2

作业一&#xff1a;结构体数组存储学生信息&#xff08;姓名&#xff0c;年龄&#xff0c;分数&#xff09;&#xff0c;完成输入学生信息&#xff0c;输出学生信息&#xff0c;求学生成绩之和&#xff0c;求最低学生成绩。 main.c #include "test.h"int main(int …

GitLab 老旧版本如何升级?

极狐GitLab 正式对外推出 GitLab 专业升级服务 https://dl.gitlab.cn/cm33bsfv&#xff01; 专业的技术人员为您的 GitLab 老旧版本实例进行专业升级&#xff01;服务详情可以在官网查看详细解读&#xff01; 那些因为老旧版本而被攻击的例子 话不多说&#xff0c;直接上图&a…

视频转GIF,5个简单好用的转换工具任你选!

GIF&#xff08;Graphics Interchange Format&#xff09;&#xff0c;作为一种轻量级的图像文件格式&#xff0c;因其能够存储多帧图像形成简单动画而广受欢迎。无论是动画影视片段&#xff0c;还是日常生活的小确幸&#xff0c;GIF都能将其定格为生动的视觉语言。当我们想要将…

FileLink跨网文件摆渡系统:重构跨网文件传输新时代

在数字化浪潮的推动下&#xff0c;企业对于数据的高效利用和安全管理提出了前所未有的要求。面对不同网络环境间的文件传输难题&#xff0c;传统方法往往显得力不从心&#xff0c;不仅效率低下&#xff0c;还存在极大的安全隐患。而FileLink跨网文件摆渡系统的出现&#xff0c;…

深信服超融合HCI6.8.0R2滚动热升级至HCI6.9.1

PS&#xff1a;滚动热升级没有业务影响&#xff0c;集群内主机逐台升级&#xff0c;会自动迁移运行中的虚拟机至其他主机&#xff1b; 整体巡检加上升级完成大概要三个小时的时间。如果在升级过程中&#xff0c;有跨集群迁移的任务&#xff0c;需要先停掉&#xff0c;不然无法…

excel将文本型数字转变为数值型数字

问题导入&#xff1a;复制数字到excel表格中&#xff0c;但是表格中数字显示为文本&#xff0c;且无法通过常规方法转变为可进行四则运算的数字。例如&#xff1a;在i3单元格中输入常规的转换方法仍然报错。在j3单元格中输入ISTEXT(H3)显示h3单元格确实为文本。 解决办法&#…

记录:网鼎杯2024赛前热身WEB01

目录扫描&#xff0c;发现上传点&#xff0c;判断可能存在文件上传漏洞&#xff0c;并根据文件后缀判断网站开发语言为php 编写蚁剑一句话木马直接上传 蚁剑连接 这里生成 的flag是随机的&#xff0c;因为烽火台反作弊会随机生成环境&#xff0c;在一顿查找后&#xff0c;在hom…

自动驾驶系列—激光雷达点云数据在自动驾驶场景中的深度应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Leetcode 柱状图中最大的矩形

h 是右边界&#xff0c;连续多个高度递增的柱子&#xff0c;如果遇到下一个 h < 栈顶元素(是最大的元素&#xff0c;单调递增栈)&#xff0c;那么会不断出栈来更新计算最大面积。 并非是一次性计算出最大面积的&#xff0c;很重要的一点是while (!stack.isEmpty()这一部分的…

使用Docker启动的Redis容器使用的配置文件路径等问题以及Python使用clickhouse_driver操作clickhouse数据库

一、使用Docker启动的Redis容器使用的配置文件路径等问题 1.docker启动的redis使用的配置文件路径是什么 使用docker搭建redis服务&#xff0c;本身redis启动的时候可以指定配置文件的&#xff0c; redis-server /指定配置文件路径/redis.conf。 但手上也没有一个redis配置文件…

SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)

TOC 问题背景 从零开始学springcloud微服务项目 注意事项&#xff1a; 约定 > 配置 > 编码IDEA版本2021.1这个项目&#xff0c;我分了很多篇章&#xff0c;每篇文章一个操作步骤&#xff0c;目的是显得更简单明了controller调service&#xff0c;service调dao默认安装ngi…

JavaEE进阶----18.<Mybatis补充($和#的区别+数据库连接池)>

详解了 1.$和#的区别 2.数据库连接池。 3.简单了解MySQL企业开发规范 一、Mybatis面试题&#xff1a;$和#的区别是什么&#xff1f; MyBatis 参数赋值有两种方式&#xff0c;咱们前面使用了 #{} 进行赋值&#xff0c;接下来我们看下二者的区别。 1.1 #是预编译SQL&#xff0c;$…

序列化问题记录:Jackson 与 Fastjson 的注解

前言 Java 后端开发中&#xff0c;我们经常需要处理 JSON 序列化和反序列化的问题。Spring 框架默认使用 Jackson 作为 JSON 处理库&#xff0c;但在某些情况下&#xff0c;我们也可能会使用 Fastjson 来处理特定的序列化需求。由于这两种库的注解不完全兼容&#xff0c;因此在…

springboot扩展点都有哪些?

在Spring Boot中&#xff0c;扩展点指的是能够自定义或增强Spring Boot功能的机制。这些扩展点允许开发者在Spring Boot的基础设施之上做定制化配置、行为修改或增强。Spring Boot主要有以下几类扩展点&#xff1a; 1. ApplicationRunner 和 CommandLineRunner 这两个接口允许…

网络运输层之(1)TCP连接管理

网络运输层之(1)TCP连接管理 Author: Once Day Date: 2024年10月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客…

【四】企业级JavaScript开发开发者控制台

多行输入 通常&#xff0c;当我们向控制台输入一行代码后&#xff0c;按 Enter&#xff0c;这行代码就会立即执行。 如果想要插入多行代码&#xff0c;请按 ShiftEnter 来进行换行。这样就可以输入长片段的 JavaScript 代码了。 总结 开发者工具允许我们查看错误、执行命令、…

【python爬虫课程设计】天气预报——分类数据爬取+数据可视化

一、选题的背景 随着人们对天气的关注逐渐增加&#xff0c;天气预报数据的获取与可视化成为了当今的热门话题&#xff0c;天气预报我们每天都会关注&#xff0c;天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…

【Linux】线程互斥与同步,生产消费模型(超详解)

目录 线程互斥 进程线程间的互斥相关背景概念 数据不一致问题 锁 深度理解锁 原理角度理解&#xff1a; 实现角度理解&#xff1a; 线程同步 条件变量 测试代码 生产消费模型 生产消费模型概念 编写生产消费模型 BlockingQueue &#xff08;1&#xff09;创建生产…