webpack5不要再用url-loader了

简介: webpack5 新增 Asset Modules 资源模块

webpack 最出色的功能之一就是,除了引入 JavaScript,还可以通过 loader 或内置的 Asset Modules 引入任何其他类型的文件。

webpack5 新增 Asset Modules 资源模块。

资源模块(asset module)是一种模块类型,它允许使用资源文件(字体,图标等)而无需配置额外 loader。

在 webpack 5 之前,通常使用:

1、raw-loader 将文件导入为字符串。

2、url-loader 将文件作为 data URI 内联到 bundle 中。

3、file-loader 将文件发送到输出目录。

资源模块类型(asset module type),通过添加 4 种新的模块类型,来替换所有这些 loader:

1、asset/resource 发送一个单独的文件并导出 URL。之前通过使用 file-loader 实现。

2、asset/inline 导出一个资源的 data URI。之前通过使用 url-loader 实现。

3、asset/source 导出资源的源代码。之前通过使用 raw-loader 实现。

4、asset 在导出一个 data URI 和发送一个单独的文件之间自动选择。之前通过使用 url-loader,并且配置资源体积限制实现。

webpack4 代码

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
            },
          },
        ],
      },
    ],
  },
};

webpack5 代码

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/i,
        type: 'asset',
        parser: {
          dataurlCondition: {
            maxSize: 8192
          }
        }
      },
    ],
  },
};

webpack4 代码

module.exports = {
  module: {
    rules: [
      {
        test: /\.png$/i,
        use: 'file-loader'
      },
      {
        test: /\.ico$/i,
        use: 'url-loader'
      },
      {
        test: /\.text$/i,
        use: 'raw-loader'
      },
    ],
  },
};

webpack5 代码

module.exports = {
  module: {
    rules: [
      {
        test: /\.png$/i,
        use: 'asset/resource'
      },
      {
        test: /\.ico$/i,
        use: 'asset/inline'
      },
      {
        test: /\.text$/i,
        use: 'asset/source'
      },
    ],
  },
};

所以我们以后不要再使用这三个 loader 了,1、raw-loader 2、url-loader 3、file-loader 。并且打开 loader 对应的 github 仓库地址,会看到这样一句话:DEPREACTED for v5: please consider migrating to asset modules. 也就说 v5 版本已经废弃,改成使用资源模块(asset module)了。

当在 webpack 5 中使用旧的 assets loader(如 file-loader/url-loader/raw-loader 等)和 asset 模块时,这可能会导致 asset 重复,所以你可能想阻止 webpack 5 内置的 asset 模块的处理,你可以通过将 asset 模块的类型设置为 'javascript/auto' 来解决。

module.exports = {
  module: {
   rules: [
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
            }
          },
        ],
       type: 'javascript/auto'
      },
   ]
  },
}

总结:不建议大家再使用旧的 assets loader 如 file-loader/url-loader/raw-loader 。webpack5 已经支持资源模块,通过 type 参数进行配置,可选的参数有:1、asset/resource2、asset/inline 3、asset/source 4、asset 。

相关文章
|
前端开发 JavaScript
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
2300 8
|
前端开发 Java Spring
掌握@ControllerAdvice配合RequestBodyAdvice/ResponseBodyAdvice使用,让你的选择不仅仅只有拦截器【享学Spring MVC】(中)
掌握@ControllerAdvice配合RequestBodyAdvice/ResponseBodyAdvice使用,让你的选择不仅仅只有拦截器【享学Spring MVC】(中)
掌握@ControllerAdvice配合RequestBodyAdvice/ResponseBodyAdvice使用,让你的选择不仅仅只有拦截器【享学Spring MVC】(中)
|
资源调度 JavaScript 前端开发
如何大幅减少 Vue.js 中的包大小和加载时间,提升用户体验!
如何大幅减少 Vue.js 中的包大小和加载时间,提升用户体验!
|
缓存 前端开发 JavaScript
优化前端性能:提升网页加载速度的10个技巧
在当今互联网时代,网页加载速度已成为用户体验的重要指标之一。本文将介绍10个有效的前端优化技巧,帮助开发人员提升网页加载速度,提升用户体验,包括减少HTTP请求、压缩资源、优化图像等方面的实用建议。
|
关系型数据库 MySQL 数据库
企业实战(15)阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中
企业实战(15)阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中
561 0
|
JavaScript 内存技术
vue template 里使用可选链操作符( ?. )报错:Errors compiling template:invalid expression: Unexpected token ‘.‘ i
vue template 里使用可选链操作符( ?. )报错:Errors compiling template:invalid expression: Unexpected token ‘.‘ i
1765 0
vue template 里使用可选链操作符( ?. )报错:Errors compiling template:invalid expression: Unexpected token ‘.‘ i
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
|
机器学习/深度学习 存储 自然语言处理
一文带你解读:卷积神经网络自动判读胸部CT图像的机器学习原理(三)
一文带你解读:卷积神经网络自动判读胸部CT图像的机器学习原理(三)
741 0
一文带你解读:卷积神经网络自动判读胸部CT图像的机器学习原理(三)
|
机器学习/深度学习 人工智能 编解码
淘宝如何做智能化UI测试?
阿里QA导读:伴随智能UI的发展,淘宝大促会场已支持AI千人千面的解决方案。但智能UI模块样式庞大的数量级面前,传统的手工测试显得十分的力不从心,单纯地堆积人力已然无法解决问题,我们该如何应对新的挑战?让我们来看看淘宝质量团队是如何破解这个难题。
1171 0
淘宝如何做智能化UI测试?
|
数据可视化
Qt 状态栏QStatusBar
Qt 状态栏QStatusBar
668 0
Qt 状态栏QStatusBar