自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Vue 的 style 加了 scoped 也會(huì)樣式?jīng)_突?可怕!

開(kāi)發(fā) 前端
雖然 scoped style 發(fā)生樣式?jīng)_突只是小概率事件,但是我們也得思考一下怎么去避免呢?

太細(xì)了!

最近在看一篇微前端的文章的時(shí)候,看到了這么一個(gè)評(píng)論,瞬間引起了我的求知欲,這個(gè)評(píng)論是這樣的:

可能有些人不知道微前端是啥,也不知道 主應(yīng)用 和 子應(yīng)用 是啥,我畫一個(gè)圖給大加簡(jiǎn)單展示一下吧:

在這里再說(shuō)一下 vue 文件的 scoped style 是怎么做到樣式隔離的,其實(shí)就是 vue解析器 在解析 vue 文件的時(shí)候,會(huì)通過(guò)內(nèi)部的一種計(jì)算方法(怎么算的后面會(huì)說(shuō)),給每一個(gè) vue 文件的 html 標(biāo)簽加上 data-v-xxx 這樣的屬性,接著通過(guò)屬性選擇器 ,來(lái)進(jìn)行樣式隔離,也叫樣式模塊化。

回到剛剛那個(gè)問(wèn)題,微前端項(xiàng)目中的 主項(xiàng)目 和 子項(xiàng)目 由于存在了相同相對(duì)路徑的 vue 文件,導(dǎo)致了兩個(gè)項(xiàng)目的兩個(gè) vue 文件的樣式產(chǎn)生了沖突~

所以,我們可以初步知道了,data-v-xxx這個(gè)屬性是根據(jù) vue文件相對(duì)路徑去計(jì)算出來(lái)的。但這也只是初步而已,具體我們還得去看一下源碼才行,這樣才能鍛煉我們解決問(wèn)題的能力~

Vue2 和 Vue3 的計(jì)算方式大差不差

1.簡(jiǎn)單看源碼

先來(lái)看看 Webpack + vue-loader 對(duì) Vue2 是怎么處理的,源碼鏈接:https://github.com/vuejs/vue-loader/blob/8357e071c45e77de0889a9feedf2079a327f69d4/src/index.ts#L142

再來(lái)看看 vite + @vitejs/plugin-vue 對(duì)于 Vue3是怎么處理的,源碼鏈接:https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/src/utils/descriptorCache.ts

2.開(kāi)發(fā)環(huán)境 & 生產(chǎn)環(huán)境

其實(shí)兩種的解析方式大差不差,總結(jié)為以下:

  • 開(kāi)發(fā)環(huán)境: 根據(jù)文件的相對(duì)路徑進(jìn)行計(jì)算data-v-xxx
  • 生產(chǎn)環(huán)境: 根據(jù)與文件的相對(duì)路徑 + 文件內(nèi)容進(jìn)行計(jì)算 data-v-xxx

所以可以看出在開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的時(shí)候,都有可能兩個(gè) vue 文件的 scoped style 樣式發(fā)生沖,雖然這只是比較邊界的情況~

為什么生產(chǎn)環(huán)境不把文件內(nèi)容加入計(jì)算呢?我想應(yīng)該是因?yàn)殚_(kāi)發(fā)階段文件內(nèi)容變化的比較頻繁,所以如果把文件內(nèi)容加入計(jì)算的話,勢(shì)必會(huì)造成構(gòu)建時(shí)間的加長(zhǎng)。

如何防樣式?jīng)_突?

雖然 scoped style 發(fā)生樣式?jīng)_突只是小概率事件,但是我們也得思考一下怎么去避免呢?

掘金有一個(gè)大佬,給 Vue 官方提了一個(gè) PR,就是在計(jì)算 data-v-xxx的時(shí)候,加入 package.json 的 name進(jìn)行計(jì)算,也就是項(xiàng)目名,這樣能防止兩個(gè)不同項(xiàng)目之間的樣式?jīng)_突~

大佬牛啊?。?!

責(zé)任編輯:趙寧寧 來(lái)源: 前端之神
相關(guān)推薦

2025-01-10 08:46:09

2021-01-20 13:15:09

HTTPS加密網(wǎng)址

2024-01-04 08:49:03

Vuescope限制

2024-06-27 09:24:55

2020-10-22 08:50:04

Cascading S

2021-06-09 18:21:20

語(yǔ)法PHP8 \Match

2010-09-14 15:04:42

list-styleCSS

2014-11-04 10:02:33

2014-11-12 09:58:48

2021-12-28 08:17:41

循環(huán) forgo

2023-08-11 17:42:35

ChatGPT人工智能

2018-08-03 13:06:16

騰訊Facebook社交

2022-05-13 21:20:23

組件庫(kù)樣式選擇器

2018-03-29 22:50:50

2009-03-12 09:51:51

職場(chǎng)老板辦公桌

2020-10-23 08:51:55

CSS

2022-08-17 08:17:01

SPI機(jī)制接口

2016-07-27 17:16:34

大數(shù)據(jù)媒體

2016-03-01 14:31:19

漏洞iOS設(shè)備安全

2010-03-23 16:26:32

無(wú)線網(wǎng)卡設(shè)備
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)