既生瑜,何生亮?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 缺点