亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

基礎

1.webpack打包本質

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

2.import from 和require

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

而前端js文件中,使用到的require在編譯時相當于一個webpack定義的關鍵字,運行時則是webpack提供的一個函數(shù)。主要能力有:完成導入,參數(shù)可以省略部分后綴名(需要配置)、是目錄時導入該目錄下的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的函數(shù),用于生成絕對路徑
  '@assets': resolve('src/assets')
 }
 },

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

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

1.解析相對路徑
查找相對當前模塊的路徑下是否有對應文件或文件夾
是文件則直接加載
是文件夾則繼續(xù)查找文件夾下的 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')中,如果編譯時能找到該圖片且該圖片大小小于規(guī)定值,那么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函數(shù)就行,這里談一下html和css中的處理。

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

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

注意,在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一定對其使用模塊路徑解析。

同時注意,需要把別名字符串的部分直接包含在參數(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`)//錯誤

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

4.hash和history模式

應該都知道,即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,此時如果設置publicPath: './',那么請注意前面提到過css中./是以css文件所在目錄為起點的,而loader會把html的標簽的src、css的url函數(shù)的路徑統(tǒng)一處理,此時可能會由于html、css的當前目錄./差異導致某一方找不到圖片。

解決方案簡單,history模式時publicPath不要用相對路徑、html或css其中一方手動注意代碼寫法繞開loader的處理即可,邏輯搞清即可,處理方法多樣。

5.常見問題

不了解@vue/cli項目中file-loader的選項設置、不了解webpack各模板中如何間接設置file-loader的選項設置。
解決靠自己了,或者右轉百度,說不定直接抄過來給file-loader設置publicPath: './'恰好對上項目結構而解決問題

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • karma+webpack搭建vue單元測試環(huán)境的方法示例

    karma+webpack搭建vue單元測試環(huán)境的方法示例

    本篇文章主要介紹了karma+webpack搭建vue單元測試環(huán)境的方法示例,這次搭建的測試環(huán)境和開發(fā)環(huán)境隔離,所以理論上適用所有使用vue的開發(fā)環(huán)境。感興趣的小伙伴們可以參考一下
    2018-05-05
  • vue如何動態(tài)配置ip與端口

    vue如何動態(tài)配置ip與端口

    這篇文章主要介紹了vue如何動態(tài)配置ip與端口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue路由跳轉攜帶參數(shù)的方式總結

    vue路由跳轉攜帶參數(shù)的方式總結

    我們知道在vue中每個頁面都需要在路由中聲明,下面這篇文章主要給大家介紹了關于vue路由跳轉攜帶參數(shù)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 如何理解Vue的作用域插槽的實現(xiàn)原理

    如何理解Vue的作用域插槽的實現(xiàn)原理

    本篇文章主要介紹了如何理解Vue的作用域插槽的實現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 簡單學習vue指令directive

    簡單學習vue指令directive

    這篇文章主要和大家一起簡單學習一下vue指令:directive,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • vue2升級vue3問題bug解決分析整理

    vue2升級vue3問題bug解決分析整理

    這篇文章主要介紹了vue2升級vue3遇到的問題bug解決分析整理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 2種在vue項目中使用百度地圖的簡單方法

    2種在vue項目中使用百度地圖的簡單方法

    在本篇文章中我們給大家整理了2種關于VUE項目中使用百度地圖的最簡單的方法,非常實用,一起來學習下。
    2018-09-09
  • el-table 行合并的實現(xiàn)示例

    el-table 行合并的實現(xiàn)示例

    本文主要介紹了el-table 行合并的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 對vue事件的延遲執(zhí)行實例講解

    對vue事件的延遲執(zhí)行實例講解

    今天小編就為大家分享一篇對vue事件的延遲執(zhí)行實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 打包組件報錯:Error:Cannot?find?module?'vue/compiler-sfc'

    打包組件報錯:Error:Cannot?find?module?'vue/compiler-sfc&ap

    最近遇到這樣的問題,vue組件庫搭建過程中使用webpack打包組件時報錯,本文給大家分享打包組件報錯:Error:?Cannot?find?module?‘vue/compiler-sfc‘的解決方法,感興趣的朋友一起看看吧
    2023-12-12

最新評論