摘要:會將引入的圖片編碼,生成并將其打包到文件中,最終只需要引入這個就能訪問圖片了。當(dāng)然,如果圖片較大,編碼會消耗性能。不依賴于,即使用時,只需要安裝即可,不需要安裝。
大家平時使用url-loader和file-loader的時候有沒有經(jīng)常遇到以下這些問題或者疑問:
開發(fā)環(huán)境的時候圖片路徑好好的,怎么發(fā)布到線上就404了???或者說html里面引用的img路徑是正確的,怎么到css里面路徑404了?
圖片路徑到底是怎么拼接???
這兩個到底是什么關(guān)系啊???
怎么less里面引用的背景圖片路徑/import其他的less文件路徑不對???
如果恰好你也有以上這些問題或者疑問,那正好這篇文章能給你很好的解答
注:這兩個loader不僅可以處理圖片,還可以處理音頻,視頻,字體等文件
如果頁面圖片較多,發(fā)很多http請求,會降低頁面性能。這個問題可以通過url-loader解決。url-loader會將引入的圖片編碼,生成dataURl并將其打包到文件中,最終只需要引入這個dataURL就能訪問圖片了。當(dāng)然,如果圖片較大,編碼會消耗性能。因此url-loader提供了一個limit參數(shù),小于limit字節(jié)的文件會被轉(zhuǎn)為DataURl,大于limit的還會使用file-loader進(jìn)行copy
file-loader作用在css文件中定義background的屬性或者在html中引入image的src,我們知道在webpack打包后這些圖片會打包至定義好的一個文件夾下,和開發(fā)時候的相對路徑會不一樣,這就會導(dǎo)致導(dǎo)入圖片路徑的錯誤。而file-loader正是為了解決此類問題而產(chǎn)生的,他修改打包后圖片的儲存路徑,再根據(jù)配置修改我們引用的路徑,使之對應(yīng)引入
聯(lián)系url-loader內(nèi)部封裝了file-loader。url-loader不依賴于file-loader,即使用url-loader時,只需要安裝url-loader即可,不需要安裝file-loader。通過上面的介紹,我們可以看到,url-loader工作分兩種情況:1.文件大小小于limit參數(shù),url-loader將會把文件轉(zhuǎn)為DataURL;2.文件大小大于limit,url-loader會調(diào)用file-loader進(jìn)行處理,參數(shù)也會直接傳給file-loader。因此我們只需要安裝url-loader即可
基本用法由于url-loader包含了file-loader所以,file-loader內(nèi)的option在url-loader中均能使用
如下為file-loader內(nèi)的屬性
如下為url-loader內(nèi)的屬性
接下來摘取幾個重要的屬性做說明
outputPath
該屬性指明我們最終導(dǎo)出的文件路徑
最終導(dǎo)出的文件路徑 === output.path + url-loader.outputPath + url-loader.name
publicPath(常用于生成環(huán)境)
該屬性指明我們最終引用的文件路徑(打包生成的index.html文件里面引用資源的前綴)
最終引用的文件路徑前綴 === output.publicPath + url-loader.publicPath + url-loader.name
name
該屬性指明文件的最終名稱。
同樣的,我們可以直接把outputPath的內(nèi)容寫到name中,一樣可以生成對應(yīng)的路徑
經(jīng)過上面的說明,我們得出結(jié)論,最終的靜態(tài)文件路徑(圖片,音頻,視頻,字體等)=== output.publicPath + url-loader.publicPath + output.path + url-loader.outputPath + url-loader.name
有了上述的基礎(chǔ),我們通過實例來說明下開篇提出的4個問題
實例說明打包后的文件結(jié)構(gòu)
img里面的四個綠色的文件除去home-logo.png都是大于10kb的大圖片,其他都是小于10kb的小圖標(biāo)
以上兩個截圖分別是開發(fā)環(huán)境和生成環(huán)境的圖片引用路徑
開發(fā)環(huán)境的時候圖片路徑好好的,怎么發(fā)布到線上就404了???或者說html里面引用的img路徑是正確的,怎么到css里面路徑404了?
答:其實大家仔細(xì)想一想就能知道答案,我們在本地開發(fā)的時候都是localhost:8080/下面的根目錄,所以當(dāng)圖片生成如下的絕對地址是不會出問題的,可是你把同樣的webpack配置放到生成環(huán)境上就不一定了,因為生成環(huán)境大部分的前端靜態(tài)文件都不是在根目錄啊,有可能就是這樣的目錄結(jié)構(gòu)
www/ +folder/ +static/ +css/ +img/ +js/ +index.html
這樣你開發(fā)環(huán)境的絕對路徑放到服務(wù)器上面自然就404了,所以要不然用相對路徑,要不然就統(tǒng)一寫死絕對路徑
(同樣道理,解釋為什么css里面的背景圖路徑404,但是這個解決起來需要用到extract-text-webpack-plugin或者mini-css-extract-plugin這個插件,前者用于webpack4以下版本,后者是4以上版本,配置options里面的publicPath)
圖片路徑到底是怎么拼接???
答:output.publicPath + url-loader.publicPath + output.path + url-loader.outputPath + url-loader.name
這兩個到底是什么關(guān)系啊???
答:上面基本上都說過了,總結(jié)一句話就是相互互補(bǔ)的關(guān)系,url-loader不能轉(zhuǎn)base64的時候file-loader來處理它
怎么less里面引用的背景圖片路徑/import其他的less文件路徑不對???
答:這里面的涉及的東西有點多,我打算再開一篇文章來說了
文章到這里就結(jié)束了,希望能幫助到大家
(BTW,語言組織的依舊很差)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103862.html
摘要:構(gòu)建構(gòu)建就是把源代碼轉(zhuǎn)換成發(fā)布到線上的可執(zhí)行代碼,包括如下內(nèi)容。自動刷新監(jiān)聽本地源代碼的變化,自動重新構(gòu)建刷新瀏覽器。自動發(fā)布更新完代碼后,自動構(gòu)建出線上發(fā)布代碼并傳輸給發(fā)布系統(tǒng)。將文件放入到項目中,在中新建一個放字體圖標(biāo)的文件夾。 項目地址 github.com/wudiufo/Web… 知識點概覽: Loader,HMR ,Create React App, Caching, Plug...
摘要:本文首發(fā)于的技術(shù)博客實用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。原文地址如果您對本系列文章感興趣,歡迎關(guān)注訂閱這里前言上一篇聽說連也能打包說到使用來加載,這一篇來講講如何籠統(tǒng)地加載其它類型的資源。源文件內(nèi)容的,用于緩存解決方案。 本文首發(fā)于Array_Huang的技術(shù)博客——實用至上,非經(jīng)作者同意,請勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/119000000690...
摘要:既生瑜,何生亮人家當(dāng)然不是以賣萌為生的,賣萌不可恥,但是是有它的用處的。對未設(shè)置或者小于設(shè)置的圖片進(jìn)行轉(zhuǎn)換,以的格式被的所使用而對于大于的圖片用進(jìn)行解析。配置工欲善其事必先利其器。 url-loader vs file-loader 既生瑜,何生亮? 人家當(dāng)然不是以賣萌為生的,賣萌不可恥,但是url-loader是有它的用處的。url-loader對未設(shè)置或者小于limit設(shè)置的圖片進(jìn)...
摘要:一前言文章介紹了一個現(xiàn)代化的項目的環(huán)境是什么樣的。其中一個就是引用路徑的問題。擴(kuò)展將單獨打包詳細(xì)介紹見這是一個插件,可以簡化創(chuàng)建文件以便為包提供服務(wù)。兩種環(huán)境的配置在中都支持的配置具體的默認(rèn)配置查詢可以移步這里的默認(rèn)設(shè)置。 一 前言 文章介紹了一個現(xiàn)代化的項目的webpack4環(huán)境是什么樣的。這里只是介紹了基礎(chǔ)的功能,如果需要詳細(xì)的相關(guān)只是可以去webpack官網(wǎng)去查閱。代碼地址:gi...
webpack基于node,因此想要學(xué)習(xí)webpack首先要安裝node。webpack4要安裝node8.2以上版本。 1、安裝webpack 為什么選擇本地安裝,主要是由于以后介紹熱更新這一部分不會報錯,如果全局安裝熱更新就會報錯,以本部分為基礎(chǔ)依次介紹,保證各部分不會出錯。 mkdir webpack-test cd webpack-test npm init //初始化npm,都選擇默認(rèn),...
閱讀 765·2019-08-29 16:32
閱讀 836·2019-08-29 12:31
閱讀 3208·2019-08-26 18:26
閱讀 3152·2019-08-26 12:20
閱讀 1727·2019-08-26 12:00
閱讀 3006·2019-08-26 10:58
閱讀 2811·2019-08-23 17:08
閱讀 2308·2019-08-23 16:32