Url-loader vs File-loader Webpack

sta*_*lei 33 javascript urlloader webpack webpack-file-loader

我想弄清楚url-loader和file-loader之间的区别.什么DataURl意思?

url-loader的工作方式与文件加载器类似,但如果文件小于字节限制,则可以返回DataURL.

jen*_*ens 44

url-loader 将文件编码为base64并将它们包含在内联中,而不是将它们作为单独的文件与另一个请求一起加载.

base64编码的文件可能如下所示:

data:;base64,aW1wb3J0IFJlYWN0IGZ...
Run Code Online (Sandbox Code Playgroud)

这将添加到您的包中.

  • 这意味着你的bundle.js将有一个字符串,表示代表你通过`url-loader`输入的资产所需的所有数据.这就是为什么他们让你设置一个限制,你不想base64编码200kb图像,因为它会增加你的捆绑大小那么多.这对于小文件来说是有利的,可以减少发出的请求数量. (8认同)
  • file-loader vs url-loader的使用是一个平衡问题.假设你有很多非常小的文件.每次浏览器请求此文件时,它只需要500字节的.svg的完整请求/响应.使用url-loader,您可以确保将此文件捆绑到您的.js文件中,无论什么作为一个请求,都必须下载该文件.较大的文件将被"发出"到您的Web服务器可以静态服务的目录,这就是文件加载器的作用.余额大小与请求数量.两者都有用于不同的目的. (6认同)
  • 谢谢詹斯!为了确保我正确理解这一点,file-loader 将您的文件加载到服务器上,然后在您的包中提供一个 url 或引用,以便您的客户端在运行您的包时可以找到它。Url-loader 做同样的事情,但如果它足够小,它也可以使您的文件成为包本身的一部分,对吗?如果我是对的,那么 url-loader 会使文件加载器过时,对吗?由于 url-loader 为您提供了更多 file-loader 为您提供的所有内容以及内联文件的选项 (3认同)
  • 内联包含它们是什么意思? (2认同)
  • 对,那是正确的。在url-loader选项中,您可以确定文件大小阈值是多少。通常在8KB左右。大于此值的文件将被视为文件加载器,带有单独的发出的文件。 (2认同)

Ghe*_*man 14

只是想添加到Jens的答案中

file-loader会将文件复制到build文件夹,并在其中包含指向它们的链接的地方插入链接。url-loader会将整个文件字节内容编码为base64,并在其中包含base64编码的内容中插入。因此,没有单独的文件。

它们大多都用于媒体资产,例如图像。主要是图像。

由于向服务器下载文件的HTTP请求较少,因此该技术可以使页面加载速度更快。

指定的大小限制也很重要url-loaderfile-loader对于超出此大小的所有文件,它将自动回退到:

{
    test: /\.(png|jpg|gif)$/i,
    use: [{
        loader: 'url-loader',
        options: {
            limit: 8192 // in bytes
        }
    }]
}
Run Code Online (Sandbox Code Playgroud)