码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vue3+vite:动态引入静态图片资源


    目录

    第一章 前言

    第二章 vue2与vue3动态引入静态图片资源

    2.1 vue2 + webpack动态引入静态图片资源

    2.1.1 了解

    2.1.2 vue2项目动态引入静态图片资源

    2.2 vue3 + vite动态引入静态图片资源

    2.2.1 了解

    2.2.2 require vs import了解

    2.2.3 vue3+vite 项目动态引入静态图片资源


    第一章 前言

    相信有很多小伙伴在前端学习中都会有从vue2转向vue3的这么一个阶段,从而有的时候会将vue2的习惯带到vue3,小编就是如此,一个本地public文件夹的动态引入问题,下面小编来简单说明一下。

    第二章 vue2与vue3动态引入静态图片资源

    2.1 vue2 + webpack动态引入静态图片资源

    2.1.1 了解

    小编通过webpack的官方文档看到:

    也就是说,它可以通过require来引入模块。webpack 会解析require,然后将这些模块按照指定的规则生成对应的资源。说明在vue2使用webpack打包时,我们是可以通过require动态引入资源的。这也是我们在写vue2时为什么使用require的原因

    2.1.2 vue2项目动态引入静态图片资源

    当然除此之外还能使用require引入自定义模块,例如:

    1. // CommonJS
    2. const myModule = require('./path/my/module');
    3. // ES Modules
    4. import myModule from './path/my/module';

    这两种方法在vue2项目中是都可行的,只是由于我们平常都用的js,从而import引入成了我们默认的习惯。 

    2.2 vue3 + vite动态引入静态图片资源

    2.2.1 了解

    静态资源处理 | Vite 官方中文文档

    2.2.2 require vs import了解

    • 首先这两是JavaScrip为了实现模块化编程从而引入的两种不同的方式。
    • 最初的CommonJS种模块规范,主要用于服务器端的JavaScript开发。它定义了一套简单的API,允许开发者将代码分割为独立的模块,是通过require关键字引入模块的。
    • 然而随着时间的发展,ES6 的发布,JavaScript引入了新的模块规范,即ES6模块,此时有了新的import关键字。
    • 注:在vite中,是只支持import,没有require相关方法,因为它默认支持 ESM 方式加载模块,使用require方法事会给我们报错:

    Uncaught (in promise) ReferenceError: require is not defined

    2.2.3 vue3+vite 项目动态引入静态图片资源

    • 根据vite官方文档我们可以知道,vite为我们提供了一种方法使用new URL('静态资源路径' ,import.meta.url).href的这么一个方法是实现
    new URL('静态资源路径', import.meta.url).href
    • 下面是小编在vue2的基础上,给的一种通用易理解的方法,代码如下:

    html页面 ——

    1. <img
    2. :src="getAssetsFile(`@/assets/images/witsz/icon_${item.roomStatus}.png`)" // 动态渲染静态资源图片的路径
    3. alt=""
    4. class="img_icon"
    5. />
    • 解释:小编使用这个之所以这么传参,目的就是增加可读性,能清除的通过html页面看出引入的是哪个文件的图片资源 

    js方法——(可以封装成公共的方法)

    1. /**
    2. * 引入本地图片
    3. * @param {*} src
    4. * @returns
    5. */
    6. export const getAssetsFile = (url) => {
    7. const urlArr = String(url).split('/') // 通过'/'分割成数组
    8. const prefix = urlArr.slice(-2)[0] // 获取倒数第二个值
    9. const fileName = urlArr.slice(-1)[0] // 获取最后一个值
    10. return new URL(`../assets/images/${prefix}/${fileName}`, import.meta.url).href // 使用vite推荐的方法渲染
    11. }
    • 解释一:使用new URL时一定要注意是相对路径,否则vite打包时会解析不出

    • 解释二:路径的写法一定要与公共根路径一致,这里小编的代码是/assets/images文件夹下的分类文件

    • 解释三: 小编之所以用split于slice的原因会在另一篇文章说明,理解好小编这里用这种方法肯定是通用可行的
  • 相关阅读:
    【problem】解决idea提示Method breakpoints may dramatically slow down debugging
    Genesis公链:夯实Web 3.0发展底座
    EAP-TLS实验之Ubuntu20.04环境搭建配置(FreeRADIUS3.0)(一)
    多线程bind二次封装
    docker-compose快速搭建Zookeeper集群
    【科研绘图】将echarts中的散点地图和热力地图融合到同一个地图上
    人工智能模型转ONNX & 连接摄像头使用ONNX格式的模型进行推理
    香港的Web3从业者们 出走新加坡还是选择留下?
    学习scrapy,发现列表返回为空
    【Linux高性能服务器编程】前篇
  • 原文地址:https://blog.csdn.net/qq_45796592/article/details/139289392
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号