加载器
在打包术语中,加载器类似于插件,但它的任务是转换文件内容。您可以使用加载器将任意输入文件转换为 Rspack 原生支持的文件类型。
提示
加载器对资源执行预处理,而配置 Rule.type 描述了对 Rspack 原生支持的资源类型的后处理。
Rspack 支持大多数社区加载器。如果您发现不支持的加载器,请随时通过 GitHub Issues 与我们联系。
示例
使用 Less
CSS 是 Rspack 的一等公民,因此对 CSS 文件的处理是原生支持的。对于 Less
文件,您需要使用外部的 less-loader 来相应地转换文件内容。
rspack.config.js
module.exports = {
module: {
rules: [
{
test: /\.less$/,
use: [
{
loader: 'less-loader',
},
],
type: 'css',
},
],
},
};
less-loader 可以将 Less 文件转换为 Rspack 支持的 CSS 模块类型,因此您可以将类型设置为 'css'
来指示 Rspack 使用原生支持的后处理 CSS 处理方法。
组合多个加载器
您可以为特定 Rule 匹配链接多个加载器,加载器按从右到左的顺序执行。
例如,您可以使用 less-loader 完成 Less 到 CSS 类型的转换,并使用 postcss-loader 对转换后的源代码进行二次转换,然后传递给 Rspack 的 CSS 后处理器以进行进一步处理。
rspack.config.js
module.exports = {
module: {
rules: [
{
test: /\.less$/,
use: [
{
loader: 'postcss-loader',
},
{
loader: 'less-loader',
},
],
type: 'css',
},
],
},
};
传递配置项
您可以使用 Rule.use 将相关配置传递给加载器,例如
rspack.config.js
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: 'postcss-loader',
options: {
postcssOptions: {
// ...
},
},
},
],
type: 'css',
},
],
},
};
使用自定义加载器
您可以使用 Rspack 的自定义加载器。在下面的示例中,我们将使用加载器 API 来编写一个简单的 banner-loader。
banner-loader 的目的是在每个模块的标题处添加一个 banner 注释,例如许可证通知
/**
* MIT Licensed
* Copyright (c) 2022-present ByteDance, Inc. and its affiliates.
* https://github.com/web-infra-dev/rspack/blob/main/LICENSE
*/
在项目的根目录下创建一个新的 banner-loader.js
文件,内容如下
banner-loader.js
const BANNER = `/**
* MIT Licensed
* Copyright (c) 2022-present ByteDance, Inc. and its affiliates.
* https://github.com/web-infra-dev/rspack/blob/main/LICENSE
*/`;
module.exports = function (content) {
return `${BANNER}\n${content}`;
};
此加载器的第一个输入是文件的内容,它允许我们处理文件内容并返回转换后的结果。脚本文件必须使用 CommonJS require()
导入。
例如,要为所有 *.js
文件添加 banner,配置可能如下所示
rspack.config.js
module.exports = {
module: {
rules: [
{
test: /\.js$/,
loader: require.resolve('./banner-loader.js'),
},
],
},
};
有关详细信息,您可以参考 loader-api
使用内置加载器
内置加载器与 JS 加载器相比具有更好的性能,同时不牺牲 JS 加载器的可组合性。以下是一些内置加载器。