资产(例如图像、字体、视频等)是 Rspack 的一等公民,这意味着你不需要任何加载器来处理它们。与其他模块类型不同,资产通常是独立存在的,因此它们以模块为粒度进行生成。
其他模块类型,例如 JavaScript 模块,通常会被捆绑到一个或多个块中,以生成最终的包。在资源模块的情况下,它们几乎不可能被捆绑,因此它们通常独立存在。这是它被称为“资源模块”的最直接原因之一。
'asset/inline'
:将资产转换为 DataURI,使用 Base64 编码,目前不支持编码配置。'asset/resource'
:将资产转换为单独的文件并导出 URL 地址。'asset'
:
'asset/inline'
或 'asset/resource'
,具体取决于配置'asset/inline'
机制,否则使用 'asset/resource'
机制。'asset/source'
:将资产文件转换为原始字符串并导出。type: 'asset'
根据条件自动选择机制默认情况下,如果资产大小小于或等于 8096 字节,则应用 'asset/inline'
机制,否则使用 'asset/resource'
策略。
如果你想修改这种行为,可以使用 module.parser.asset.dataUrlCondition
修改全局配置,或者使用 Rule.parser. dataUrlCondition
为特定合格模块单独配置它。
type: 'asset/inline'
替换 url-loader
type: 'asset/resource'
替换 file-loader
type: 'asset/source'
替换 raw-loader
有时候我们想优化特定的图像,例如压缩其大小。我们仍然可以使用这些加载器。
例如,使用 image-minimizer-webpack-plugin 优化所有以 .png
结尾的文件
上述条件使用 type: 'asset/resource'
,这将指示 Rspack 为所有匹配文件完成单个文件生成,并返回最终的资产 URL 地址。