【发布时间】:2018-08-11 07:27:24
【问题描述】:
我正在尝试找出 url-loader 与 file-loader 之间的区别。 DataURl 是什么意思?
url-loader 的工作方式与 file-loader 类似,但在以下情况下可以返回 DataURL 文件小于字节限制。
【问题讨论】:
标签: javascript webpack urlloader webpack-file-loader
我正在尝试找出 url-loader 与 file-loader 之间的区别。 DataURl 是什么意思?
url-loader 的工作方式与 file-loader 类似,但在以下情况下可以返回 DataURL 文件小于字节限制。
【问题讨论】:
标签: javascript webpack urlloader webpack-file-loader
url-loader 会将文件编码为 base64 并将它们包含在内,而不是将它们作为单独的文件与另一个请求一起加载。
base64 编码的文件可能如下所示:
data:;base64,aW1wb3J0IFJlYWN0IGZ...
这将被添加到您的捆绑包中。
【讨论】:
url-loader 放置的资产所需的所有数据。这就是为什么他们让你设置一个限制,你不想对 200kb 的图像进行 base64 编码,因为它会使你的包大小增加那么多。这对小文件有好处,可以减少请求的数量。
emitted 放到您的网络服务器可以静态服务的目录中,这就是文件加载器的作用。平衡大小与请求数量。两者都有不同的用途。
只是想补充一下 Jens 的答案
file-loader 会将文件复制 到构建文件夹,并在包含它们的位置插入指向它们的链接。 url-loader 会将整个文件字节内容编码为 base64,并在包含它们的地方插入 base64 编码的内容。所以没有单独的文件。
它们大多都用于图像等媒体资产。主要是图片。
这种技术可能会加快页面加载速度,因为服务器下载文件的 http 请求更少。
为url-loader 指定大小限制也很重要。对于超出此大小的所有文件,它将自动回退到file-loader:
{
test: /\.(png|jpg|gif)$/i,
use: [{
loader: 'url-loader',
options: {
limit: 8192 // in bytes
}
}]
}
【讨论】:
两个答案都很好,但我想进一步解释一下Data URL,检查这里https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs,所以它的格式是
data:[<mediatype>][;base64],<data>
例如,如果我转换一个 mp3 文件,它将如下所示,
import audio from '../assets/media/audio.mp3';
console.log('base64 of my audio: ', audio);
//with url-loader setup
//I will get something like "data:audio/mpeg;base64,xxx"
【讨论】: