CSS
Rspack 内置了对 CSS 的支持,并提供了多种能力来支持 CSS 打包。
开启 CSS 支持
你可以从以下方式中进行选择:
内置 CSS 支持
Rspack 支持以下四种 CSS 模块类型,你可以手动进行配置:
css/auto:基于文件扩展名自动判断是普通 CSS 文件还是 CSS Modules,*.module.css或*.modules.css结尾的文件会被视为 CSS Modules。css:用于解析普通的 CSS 文件,不启用 CSS Modules 能力。css/global:用于以全局作用域模式解析 CSS Modules。css/module:用于解析 CSS Modules。
css/auto、css/global 和 css/module 的区别在于 CSS Modules 作用域对生成 CSS 的影响:
css/auto会根据文件名选择行为。style.css会作为普通 CSS 处理,而style.module.css和style.modules.css会按css/module处理。css/module会启用 CSS Modules,默认使用局部作用域。像.button这样的选择器会在生成的 CSS 中被重命名。如果希望选择器保持全局,可以使用:global(.button)。css/global会启用 CSS Modules,默认使用全局作用域。像.button这样的选择器会保持全局。如果希望选择器在生成的 CSS 中被重命名,可以使用:local(.button)。
例如:
当使用 type: 'css' 时,文件会作为普通 CSS 输出,不会应用 CSS Modules 作用域转换。
当使用 type: 'css/module' 时,.button 和 .title 都是局部选择器,会在生成的 CSS 中被重命名。如果 .button 需要保持全局,可以使用 :global(.button)。
当使用 type: 'css/global' 时,.button 会保持全局,而 .title 因为被 :local(...) 包裹,会被重命名。
生成的 CSS 大致如下:
要启用 CSS 支持,需要将 CSS 规则添加到配置中:
你也可以通过配置自定义将哪些文件视为 CSS 文件。比如,将 .less 文件视为 CSS 文件:
使用 CssExtractRspackPlugin
Rspack 支持使用 css-loader 和 CssExtractRspackPlugin,用于生成独立的 CSS 文件。
如果你正在迁移一个使用 mini-css-extract-plugin 的 webpack 项目,那么推荐使用 CssExtractRspackPlugin 来替换 mini-css-extract-plugin,它们的功能和配置方式基本一致。
- 安装 css-loader:
- 添加配置:
参考 迁移指南 了解如何从 webpack 进行迁移。
CssExtractRspackPlugin 不能与 type: 'css'、type: 'css/auto'、type: 'css/global' 或 type: 'css/module' 同时使用,因为 css-loader 会将 css 转换成 javascript 类型。
使用 style-loader
Rspack 支持使用 css-loader 和 style-loader,将 CSS 通过 <style> 标签注入。这种方式不会生成独立的 CSS 文件,而是将 CSS 的内容内联到 JS 文件中。
- 安装 css-loader 和 style-loader:
- 添加配置:
style-loader 不能与 type: 'css'、type: 'css/auto'、type: 'css/global' 或 type: 'css/module' 同时使用,因为 css-loader 会将 css 转换成 javascript 类型。
CSS Modules
CSS Modules 是一种 CSS 文件的组织方式,它通过为类名自动生成唯一标识符,来局部化 CSS 的作用域,这允许你在不同的文件中使用相同的类名,而不用担心冲突。
内置支持
在开启 内置 CSS 支持 后,Rspack 默认将扩展名为 *.module.css 的文件视为 CSS Modules,你可以在 JavaScript 文件中导入它,然后将 CSS 文件中定义的每个类作为模块的导出来访问。
你可以使用命名空间导入:
也可以使用具名导入:
要在 Rspack 中启用默认导入方式,你需要在 Rspack 配置中将 namedExports 配置为 false。这允许你在用到 CSS Modules 时,除了命名空间导入和具名导入,也能通过默认导入整个样式模块:
现在你可以使用默认导入:
Rspack 提供了选项,允许你自定义 CSS Modules 的解析和生成方式:
- module.parser.css:配置 CSS Modules 的解析方式。
- module.generator["css/auto"]:配置
css/auto模块的生成方式。 - module.generator["css/global"]:配置
css/global模块的生成方式。 - module.generator["css/module"]:配置
css/module模块的生成方式。
使用 css-loader
如果你没有开启 Rspack 的内置 CSS 支持,那么可以使用 css-loader 来提供对 CSS Modules 的支持。
通过 css-loader 的 modules 选项开启:
更多用法请参考 css-loader - modules。
PostCSS
Rspack 支持使用 postcss-loader,你可以这样配置:
上述配置会将所有 *.css 文件经过 postcss-loader 处理,并将生成的结果交给 Rspack 完成 CSS 后续流程的处理。
Sass
Rspack 支持使用 sass-loader,你可以这样配置:
上述配置会将所有 *.sass 和 *.scss 文件经过 sass-loader 处理,并将生成的结果交给 Rspack 完成 CSS 后续流程的处理。
Less
Rspack 支持使用 less-loader,你可以这样配置:
上述配置会将所有 *.less 文件经过 less-loader 处理,并将生成的结果交给 Rspack 完成 CSS 后续流程的处理。
Tailwind CSS
Tailwind CSS 是一个以 Utility Class 为基础的 CSS 框架和设计系统,可以快速地为组件添加常用样式,同时支持主题样式的灵活扩展。
Tailwind CSS 官网提供了集成 Rspack 的指南,请参考:

