中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue圖片路徑的實現

發布時間:2021-06-03 17:00:37 來源:億速云 閱讀:320 作者:Leah 欄目:web開發

這期內容當中小編將會給大家帶來有關vue圖片路徑的實現,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1.webpack打包本質

本質就是nodejs去執行webpack腳本,由webpack腳本對項目各個文件進行必要的編譯(通俗而言即字符串處理),再輸出到某個目錄

2.import from 和require

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

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

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

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

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

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

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

1.解析相對路徑
查找相對當前模塊的路徑下是否有對應文件或文件夾
是文件則直接加載
是文件夾則繼續查找文件夾下的 package.json 文件
有 package.json 文件則按照文件中 main 字段的文件名來查找文件
無 package.json 或者無 main 字段則查找 index.js 文件.

2.解析模塊名
查找當前文件目錄下,父級目錄及以上目錄下的 node_modules 文件夾,看是否有對應名稱的模塊

3.解析絕對路徑
直接查找對應路徑的文件

正文

1.圖片處理及路徑轉換

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

url-loader

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

file-loader

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

當前目錄./的差異

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

2.html、js、css的處理

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

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

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

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

3.進階:別名的使用

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

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

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

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

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`)//錯誤

上述就是小編為大家分享的vue圖片路徑的實現了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

突泉县| 绩溪县| 容城县| 青冈县| 琼结县| 北流市| 灵寿县| 桐梓县| 宝清县| 邹平县| 隆昌县| 张家口市| 德安县| 喀喇| 广宗县| 柳林县| 合肥市| 富阳市| 黔江区| 黑水县| 高安市| 禹州市| 华安县| 烟台市| 巴彦淖尔市| 襄汾县| 富川| 岳阳县| 绍兴市| 乌恰县| 仁布县| 岗巴县| 凤台县| 岐山县| 诸暨市| 云林县| 永安市| 清镇市| 绥德县| 右玉县| 瓦房店市|