既生瑜,何生亮?javascript
人家固然不是以賣萌爲生的,賣萌不可恥,可是url-loader是有它的用處的。url-loader對未設置或者小於limit設置的圖片進行轉換,以base64的格式被img的src所使用;而對於大於limit byte的圖片用file-loader進行解析。css
over~~,稍微瞄一下代碼,是否是很簡單,本身都在偷偷笑了,哇咔咔html
不過雖然寥寥幾行,仍是有不懂得膩:java
模塊入參content是個Buffer類型?node
file-loader最後一步幹了啥?webpack
emitFile(name: string, content: Buffer|String, sourceMap: {...})
這是 webpack loader context提供的內部方法,根據路徑和內容生成一個新的圖片,供html以絕對路徑的方式進行請求和使用。工欲善其事,必先利其器。web
看一下官網webpack給出的url-loader的配置參數吧。
戳我api
配置名稱 | 類型 | 默認值 | 含義 |
---|---|---|---|
limit | {Number} | undefined | 轉化爲data-url內聯使用的文件帶下閾值 |
mimetype | {String} | 文件擴展名 | 文件的mimetype類型(默認使用文件擴展類型) |
fallback | {String} | file-loader | 在文件大於limit時,交於處理的加載器 |
在webpack中配置可以下:
瀏覽器
知其然之其因此然。緩存
經過url-loader將小圖片轉換爲base64後,面對一長串的它,你是否困惑了呢?它是誰?它又是怎麼出現的?
帶着這個問題,咱們順路看一下這個小東西的原理吧:
[名字的由來]:經過下面64個可打印的字符來表示二進制數據
[它的原理]:64=2的6次方,所以每6位均可以用一個base64字符表示。而每1個
字節是8位,那麼3個字節 = 3 * 8 = 24bit = 6 * 4 = 4個base64字符
(這樣看來,用base64
表示二進制,比原來二進制表示多了1/3倍的字節)。
[它的步驟]
看一下這個小例子,練練手吧~
「Girl」 => 「JGlybA==」
說了這麼多原理,那用了它,對咱們有什麼實際的好處呢?這個分狀況討論呢。
首先咱們要了解一下它的優缺點,這樣就好判斷使用場景了。
優勢 vs 缺點