如何将全局 css 转换为 css 模块?

Posted

技术标签:

【中文标题】如何将全局 css 转换为 css 模块?【英文标题】:How to transform global css into css modules? 【发布时间】:2022-01-22 03:47:33 【问题描述】:

我在 nextjs 项目中使用 react-bootstrap 和 bootstrap,因此我必须包含全局 css:

// _app.js
import 'bootstrap/dist/css/bootstrap.min.css';

问题是我在每个页面中加载了很多未使用的 css,因此 google lighthouse 降低了我的分数。

我已经尝试清除未使用的 css,即使分数增加了,仍然有未使用的样式。我不需要警报,也不需要无处不在的按钮。我只想在每个特定页面中导入我需要的样式。

有没有办法将全局 css 转换为 css 模块,所以我只导入我需要的东西?也许一些 webpack 配置或类似的?

我可以自己手动将引导代码拆分为组件。但我想知道是否有任何自动的方式来做到这一点。所以我不必为所有需要样式的 node_modules 执行此过程。

【问题讨论】:

【参考方案1】:

这是 Bootstrap 的缺点之一——除了从核心 bootstrap.scss 文件中删除模块并重新编译一个独特的版本之外,没有办法开箱即用地做到这一点。 (例如,从 bootstrap.scss 中删除 @import "accordion"; 以消除手风琴样式)

理论上,您可以将每个导入编译为单独的 .scss 文件并仅在需要时加载 .css,但存在一些细微的相互依赖关系,需要考虑确保某些代码不会重复(例如,变量、重启, 函数)

相反,您很可能只使用几个模块(grid.scss、spacing.scss、buttons.scss)并且可以消除所有其他模块。

【讨论】:

是的,但即使我只导入我需要的全局样式表,我仍然会导入未使用的 css。我的所有页面都不需要按钮(例如)。我认为唯一可行的解​​决方案是将引导程序手动拆分为组件。

以上是关于如何将全局 css 转换为 css 模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应 css 模块中创建全局设置文件

如何在 React 应用程序中使用 CSS 模块应用全局样式?

具有 PostCSS / CSS 模块的全局实用程序类

reactstyleloader的用法

CSS:如何将彩色图像转换为灰色或黑白图像[重复]

如何将 CSS 模块的类型声明编写为 ES 模块