当前位置:首页 > 科技  > 软件

Vue 的 style 加了 scoped 也会样式冲突?可怕!

来源: 责编: 时间:2024-03-22 17:42:03 261观看
导读太细了!
最近在看一篇微前端的文章的时候,看到了这么一个评论,瞬间引起了我的求知欲,这个评论是这样的:可能有些人不知道微前端是啥,也不知道 主应用 和 子应用 是啥,我画一个图给大加简单展示一下吧:在这里再说一下 vue 文件

太细了!

最近在看一篇微前端的文章的时候,看到了这么一个评论,瞬间引起了我的求知欲,这个评论是这样的:dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

可能有些人不知道微前端是啥,也不知道 主应用 和 子应用 是啥,我画一个图给大加简单展示一下吧:dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

在这里再说一下 vue 文件的 scoped style 是怎么做到样式隔离的,其实就是 vue解析器 在解析 vue 文件的时候,会通过内部的一种计算方法(怎么算的后面会说),给每一个 vue 文件的 html 标签加上 data-v-xxx 这样的属性,接着通过属性选择器 ,来进行样式隔离,也叫样式模块化。dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

回到刚刚那个问题,微前端项目中的 主项目 和 子项目 由于存在了相同相对路径的 vue 文件,导致了两个项目的两个 vue 文件的样式产生了冲突~dvD28资讯网——每日最新资讯28at.com

所以,我们可以初步知道了,data-v-xxx这个属性是根据 vue文件相对路径去计算出来的。但这也只是初步而已,具体我们还得去看一下源码才行,这样才能锻炼我们解决问题的能力~dvD28资讯网——每日最新资讯28at.com

Vue2 和 Vue3 的计算方式大差不差

1.简单看源码

先来看看 Webpack + vue-loader 对 Vue2 是怎么处理的,源码链接:https://github.com/vuejs/vue-loader/blob/8357e071c45e77de0889a9feedf2079a327f69d4/src/index.ts#L142dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

再来看看 vite + @vitejs/plugin-vue 对于 Vue3是怎么处理的,源码链接:https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/src/utils/descriptorCache.tsdvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

2.开发环境 & 生产环境

其实两种的解析方式大差不差,总结为以下:dvD28资讯网——每日最新资讯28at.com

  • 开发环境: 根据文件的相对路径进行计算data-v-xxx
  • 生产环境: 根据与文件的相对路径 + 文件内容进行计算 data-v-xxx

所以可以看出在开发环境和生产环境的时候,都有可能两个 vue 文件的 scoped style 样式发生冲,虽然这只是比较边界的情况~dvD28资讯网——每日最新资讯28at.com

为什么生产环境不把文件内容加入计算呢?我想应该是因为开发阶段文件内容变化的比较频繁,所以如果把文件内容加入计算的话,势必会造成构建时间的加长。dvD28资讯网——每日最新资讯28at.com

如何防样式冲突?

虽然 scoped style 发生样式冲突只是小概率事件,但是我们也得思考一下怎么去避免呢?dvD28资讯网——每日最新资讯28at.com

掘金有一个大佬,给 Vue 官方提了一个 PR,就是在计算 data-v-xxx的时候,加入 package.json 的 name进行计算,也就是项目名,这样能防止两个不同项目之间的样式冲突~dvD28资讯网——每日最新资讯28at.com

大佬牛啊!!!dvD28资讯网——每日最新资讯28at.com

dvD28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-78653-0.htmlVue 的 style 加了 scoped 也会样式冲突?可怕!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 为什么都说 HashMap 是线程不安全的?

下一篇: 使用 Node.js 和 htmx 构建全栈 CRUD 应用程序

标签:
  • 热门焦点
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top