最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺出vue圖片路徑的實(shí)現(xiàn)

 更新時(shí)間:2019年09月04日 11:44:17   作者:猛漢_赤雞仙人  
這篇文章主要介紹了深入淺出vue圖片路徑的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

基礎(chǔ)

1.webpack打包本質(zhì)

本質(zhì)就是nodejs去執(zhí)行webpack腳本,由webpack腳本對(duì)項(xiàng)目各個(gè)文件進(jìn)行必要的編譯(通俗而言即字符串處理),再輸出到某個(gè)目錄

2.import from 和require

webpack相關(guān)腳本中的require和我們前端js文件中使用的require函數(shù)不是一回事,它的require是nodejs的關(guān)鍵字。

而前端js文件中,使用到的require在編譯時(shí)相當(dāng)于一個(gè)webpack定義的關(guān)鍵字,運(yùn)行時(shí)則是webpack提供的一個(gè)函數(shù)。主要能力有:完成導(dǎo)入,參數(shù)可以省略部分后綴名(需要配置)、是目錄時(shí)導(dǎo)入該目錄下的index.js、能夠使用別名(alias,需要配置)、導(dǎo)入圖片(實(shí)際導(dǎo)入為base64編碼后的字符串),通過(guò)編譯時(shí)提供信息給各個(gè)loader處理以獲得各種加載導(dǎo)入功能。import from是webpack提供的語(yǔ)法糖,可當(dāng)作是const xx=require(xxxx)的組合。

3.webpack模塊化處理解析配置

即webpack的resolve配置:解析(resolve) 

 resolve: {
 extensions: ['.js', '.vue', '.json'],
 alias: {
  '@': resolve('src'),//此resolve通常是外面定義的一個(gè)nodejs的函數(shù),用于生成絕對(duì)路徑
  '@assets': resolve('src/assets')
 }
 },

上面require提到的別名、可省略擴(kuò)展名在這里配置。

至于require函數(shù)中的路徑參數(shù),具體的解析法則如下:webpack如何解析代碼模塊路徑

1.解析相對(duì)路徑
查找相對(duì)當(dāng)前模塊的路徑下是否有對(duì)應(yīng)文件或文件夾
是文件則直接加載
是文件夾則繼續(xù)查找文件夾下的 package.json 文件
有 package.json 文件則按照文件中 main 字段的文件名來(lái)查找文件
無(wú) package.json 或者無(wú) main 字段則查找 index.js 文件.

2.解析模塊名
查找當(dāng)前文件目錄下,父級(jí)目錄及以上目錄下的 node_modules 文件夾,看是否有對(duì)應(yīng)名稱的模塊

3.解析絕對(duì)路徑
直接查找對(duì)應(yīng)路徑的文件

正文

1.圖片處理及路徑轉(zhuǎn)換

一般由url-loader和file-loader處理。

url-loader

這個(gè)簡(jiǎn)單,把小圖片轉(zhuǎn)換成base64編碼并返回該base64編碼的字符串。即js代碼var jpg=require('./assets/a.jpg')中,如果編譯時(shí)能找到該圖片且該圖片大小小于規(guī)定值,那么url-loader返回該圖片的base64編碼,變量jpg的值將會(huì)是該圖片的base64編碼。

file-loader

file-loader將處理url-loader沒(méi)處理的那些大圖片,它會(huì)把圖片復(fù)制到指定目錄并返回public URL(參見(jiàn)file-loader文檔),代表編譯后運(yùn)行時(shí)該圖片的url路徑字符串。即js代碼var jpg=require('./assets/b.jpg')中,如果編譯時(shí)能找到該圖片,那么jpg的值將會(huì)是/img/b.jpg(具體取決于配置)

當(dāng)前目錄./的差異

注意css和js、html的當(dāng)前路徑不一致。css的./是指該css文件所在路徑,而js、html中的./是指瀏覽器當(dāng)前地址欄的url的路徑目錄。

2.html、js、css的處理

js中使用require函數(shù)就行,這里談一下html和css中的處理。

html中,由vue-loader提供處理(語(yǔ)法糖)。其默認(rèn)選項(xiàng)下,會(huì)把video、img、source標(biāo)簽的src屬性放入require函數(shù)并把結(jié)果替換到原位置。也就是: vue-loader提取這些標(biāo)簽src屬性->require函數(shù)->file-loader或url-loader處理->使用返回值進(jìn)行替換。類似的,可以右轉(zhuǎn)百度搜索 vue-loader transformToRequire 這個(gè)東西,你可以擴(kuò)展它讓其他標(biāo)簽的屬性同樣擁有該語(yǔ)法糖。

css中,由css-loader提供處理。類似于上面的html,css-loader會(huì)把url(./assets/b.jpg)給處理成url(/img/b.jpg),同樣通過(guò)require函數(shù)獲取處理結(jié)果。

注意,在html和css中,絕對(duì)路徑的寫法編譯時(shí)將不被處理(loader判斷),即url(/assets/b.jpg)編譯后不變。而js中require('/assets/b.jpg')編譯時(shí)將被認(rèn)為是打包本地磁盤中/assets/b.jpg文件,不存在時(shí)將編譯報(bào)錯(cuò)。

3.進(jìn)階:別名的使用

即上面提到的webpack模塊化處理,js中@/assets/a.jpg這種。

html中:可直接使用,也可使用~指示webpack這是一個(gè)模塊路徑,即src='@/assets/a.jpg'src='~@/assets/a.jpg'都是可行的
css中,必須使用~指示webpack這是一個(gè)模塊路徑,即url(~@/assets/b.jpg)

js中,不用寫~,webpack一定對(duì)其使用模塊路徑解析。

同時(shí)注意,需要把別名字符串的部分直接包含在參數(shù)中。即

let number=1, p1='./', p2='@assets'

img.src=require(`./assets/img${number}.jpg`)//正確
img.src=require(`@assets/img${number}.jpg`)//正確
img.src=require(`${p1}assets/img${number}.jpg`)//正確

img.src=require(`${p2}/img${number}.jpg`)//錯(cuò)誤

我也不知道這個(gè)是bug還是什么鬼了,有了解的大佬可以說(shuō)下

4.hash和history模式

應(yīng)該都知道,即http://localhost/#/a/b/c這樣的hash模式中,html和js的./a.jpg均為http://localhost/a.jpg。而http://localhost/a/b/c這樣的history模式中,html和js的./a.jpg均為http://localhost/a/b/a.jpg,此時(shí)如果設(shè)置publicPath: './',那么請(qǐng)注意前面提到過(guò)css中./是以css文件所在目錄為起點(diǎn)的,而loader會(huì)把html的標(biāo)簽的src、css的url函數(shù)的路徑統(tǒng)一處理,此時(shí)可能會(huì)由于html、css的當(dāng)前目錄./差異導(dǎo)致某一方找不到圖片。

解決方案簡(jiǎn)單,history模式時(shí)publicPath不要用相對(duì)路徑、html或css其中一方手動(dòng)注意代碼寫法繞開(kāi)loader的處理即可,邏輯搞清即可,處理方法多樣。

5.常見(jiàn)問(wèn)題

不了解@vue/cli項(xiàng)目中file-loader的選項(xiàng)設(shè)置、不了解webpack各模板中如何間接設(shè)置file-loader的選項(xiàng)設(shè)置。
解決靠自己了,或者右轉(zhuǎn)百度,說(shuō)不定直接抄過(guò)來(lái)給file-loader設(shè)置publicPath: './'恰好對(duì)上項(xiàng)目結(jié)構(gòu)而解決問(wèn)題

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue.js的Mixins使用方式

    Vue.js的Mixins使用方式

    Vue.js的Mixins功能允許封裝可復(fù)用的組件選項(xiàng),實(shí)現(xiàn)代碼復(fù)用和模塊化,Mixins可以包含數(shù)據(jù)、方法、生命周期鉤子等組件選項(xiàng),使用時(shí),Mixins中的選項(xiàng)會(huì)被混入組件中,優(yōu)先級(jí)低于組件自身選項(xiàng),優(yōu)點(diǎn)包括代碼復(fù)用、高靈活性和簡(jiǎn)單易用
    2024-09-09
  • vue3使用quill富文本編輯器保姆級(jí)教程(附踩坑解決)

    vue3使用quill富文本編輯器保姆級(jí)教程(附踩坑解決)

    這篇文章主要給大家介紹了關(guān)于vue3使用quill富文本編輯器保姆級(jí)教程的相關(guān)資料,在許多網(wǎng)站和應(yīng)用程序中富文本編輯器是一種常見(jiàn)的工具,它使用戶能夠以直觀的方式創(chuàng)建和編輯文本內(nèi)容,需要的朋友可以參考下
    2023-11-11
  • Vue源碼學(xué)習(xí)之響應(yīng)式是如何實(shí)現(xiàn)的

    Vue源碼學(xué)習(xí)之響應(yīng)式是如何實(shí)現(xiàn)的

    最近接觸了vue.js,一度非常好奇vue.js是如何監(jiān)測(cè)數(shù)據(jù)更新并且重新渲染頁(yè)面,這篇文章主要給大家介紹了關(guān)于Vue源碼學(xué)習(xí)之響應(yīng)式是如何實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 路由vue-route的使用示例教程

    路由vue-route的使用示例教程

    這篇文章主要介紹了路由vue-route的使用,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • vue中的ref和$refs的使用

    vue中的ref和$refs的使用

    這篇文章主要介紹了vue中的ref和$refs的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • express+vue+mongodb+session 實(shí)現(xiàn)注冊(cè)登錄功能

    express+vue+mongodb+session 實(shí)現(xiàn)注冊(cè)登錄功能

    這篇文章主要介紹了express+vue+mongodb+session 實(shí)現(xiàn)注冊(cè)登錄,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • 詳解Vue生命周期的示例

    詳解Vue生命周期的示例

    本篇文章主要介紹了詳解Vue生命周期的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Vue子父組件之間傳值的三種方法示例

    Vue子父組件之間傳值的三種方法示例

    Vue的組件化給前端開(kāi)發(fā)帶來(lái)極大的便利,下面這篇文章主要給大家介紹了關(guān)于Vue子父組件之間傳值的三種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Vue中如何判斷對(duì)象是否為空

    Vue中如何判斷對(duì)象是否為空

    這篇文章主要介紹了Vue中如何判斷對(duì)象是否為空,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue3中的常見(jiàn)組件通信之props和自定義事件詳解

    Vue3中的常見(jiàn)組件通信之props和自定義事件詳解

    這篇文章主要介紹了Vue3中的常見(jiàn)組件通信之props和自定義事件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評(píng)論

大名县| 泰顺县| 驻马店市| 蒙山县| 都兰县| 绵竹市| 桑日县| 天柱县| 孝感市| 康保县| 印江| 鲁甸县| 桃园市| 毕节市| 乳山市| 海丰县| 泗阳县| 兰溪市| 通化市| 大姚县| 红河县| 宜城市| 雅江县| 遂川县| 高平市| 翁源县| 藁城市| 无棣县| 额济纳旗| 抚州市| 昌都县| 开封市| 九寨沟县| 常山县| 南雄市| 民丰县| 双鸭山市| 德江县| 历史| 永嘉县| 当阳市|