首页 > 其他分享 >vue本地能够访问图片,打包项目之后图片无法访问

vue本地能够访问图片,打包项目之后图片无法访问

时间:2023-11-01 12:34:42浏览次数:28  
标签:vue url 无法访问 URL meta let images import 图片

//template中
<img :src="boxHerf" />

//js
let boxHerf = ref('/src/assets/images/contain.svg')

上述写法本地能够正常访问图片,但是打包之后无法正常访问,将 boxHerf 换成下列写法即可解决

let boxHerf = new URL('/src/assets/images/contain.svg', import.meta.url).href;

注意:new URL(url,import.meta.url) 中的参数 url ,不能如下面定义变量拼接

const getPath = (url) => {
  let path = 'src/assets';
  return new URL(`${path}${url}`, import.meta.url).href;
};

上述开发没问题,但是打包会报错,不支持import.meta.url

new URL()

创建一个新 URL 对象的语法:new URL(url, [base])

  • url —— 完整的 URL,或者仅路径(如果设置了 base),

  • base —— 可选的 base URL:如果设置了此参数,且参数 url 只有路径,则会根据这个 base 生成 URL。

'/src/assets/images/contain.svg'是相对路径,而import.meta.url 是 base url (根链接)。

import.meta

import.meta 对象包含关于当前模块的信息。

它的内容取决于其所在的环境。在浏览器环境中,它包含当前脚本的 URL,或者如果它是在 HTML 中的话,则包含当前页面的 URL。

因此可以把import.meta 打印出来:

console.log("import.meta.url" ,import.meta)

//import.meta.url

es6使用require引入图片

1、直接写成静态的是没有问题的

let imgUrl = require('../images/001.png');

2、如果你想动态的引入图片,就会报错

let ImgSrc = "../images/001.png";
let img = require(ImgSrc)

因为require是打包工具所需要的标识,你写成运行时通过变量定义,是无法获取到,没办法打包。

3、require()写入的必须是path

let imgSrc = "001.png";
require("../../asset/images/" + imgSrc);
let imgName = "001";
require(`../../asset/images/${imgName}.png`);

标签:vue,url,无法访问,URL,meta,let,images,import,图片
From: https://www.cnblogs.com/IcingPig/p/17802783.html

相关文章

  • vue2 单页面应用兼容 ie & 对象不支持"append"属性或方法
    在平时如果用到vue2但是打开ie测试的时候发现代码没起到预期的效果(作用)的话。就要用到polyfill和browser来对你的vue代码转成es5语法啦。具体用法是:先下载polyfill和browser的js文件然后引入polyfill和browser的js文件1<scriptsrc="./graphic_js/pol......
  • import.meta.globEager('./src/components/**/*.vue'); 遍历文件
    main.jsconstimportAll=(modules)=>{Object.keys(modules).forEach((key)=>{constcomponent=key.replace('/src/','@/').replace('.vue','');constcomponentName=key.split('/').slice(......
  • Vue数据更新页面却没有更新的几种情况以及解决方法
    情况一:Vue无法检测实例被创建时不存在于data中的变量原因:由于Vue会在初始化实例时对data中的数据执行getter/setter转化,所以变量必须在data对象上存在才能让Vue将它转换为响应式的。例如: 12345newVue({  data:{},  template:'<div>{{message......
  • vue路由模式区别
    目的:在vue中路由模式有history和hash模式两种模式:他们的目的是为了在SPA单页面情况下,切换页面不会向后端服务器发送请求;hash模式:为以#作为分隔符,原理:通过window.location.hash获取hash值;监听hash中的hashchange事件,当URL的hash发生改变的时候,触发事件。在地......
  • vuejs3.0 从入门到精通——初始化项目——路由
    路由 VueRouter是Vue.js官方的路由管理器,它和Vue.js深度集成,用于构建单页面应用。Vue.js单页面应用是基于路由和组件映射的,路由用于配置访问路径,将组件(components)映射到路由路径(routes)。一、路由模式 VueRouter常用的两种模式是hash模式和HTML5模式,对应的创建......
  • 二、搭建前后端分离的自动化测试平台的前端Vue3+Element-plus前端项目
    一、安装Node.js以及配置环境变量1、Node获取地址https://nodejs.org/en/download一直默认选项安装,安装好了之后,在环境变量中会自动配置Node的地址,可以在cmd中使用node-v/npm-v命令验证是否下载成功2、设置Node的配置内容(1)在安装目录下新建两个文件夹命名为node_cache,和no......
  • vue3实现input输入框只能输入中文
    简单记录下,方便以后复制<el-inputv-model="form.name"placeholder="使用人的姓名":maxlength="20":formatter="(value)=>value.replace(/[^\u4E00-\u9FA5]/g,'')"/>......
  • [win]解决windows商店不能访问/edge无法访问的问题
      设置DNS为微软DNS: 4.2.2.1 4.2.2.2 ......
  • 前端大文件切片上传,断点续传、秒传等解决方案,vue中使用实例
    先看逻辑如何切片?如何获取文件唯一hash?与后端交互获取文件上传的状态,用于判断情况,是秒传还是续传?上传切片文件,判断失败文件重新执行?全部上传完成通知后端?1、先上全部代码,后面第2部分解析、第3部分vue中使用相关依赖spark-md5主要用于拿取文件的md5mitt发布订阅importSparkMD5......
  • [Vue]什么是组件化?
    组件的定义:实现应用中局部功能代码和资源的集合。   ......