prefer-css-modules-in-site-src
Prefer CSS modules over global stylesheet imports in Docusaurus component and page source files.
Targeted pattern scopeโ
This rule focuses on Docusaurus site source files under:
src/components/**src/pages/**
It reports stylesheet imports such as .css, .scss, or .sass when they are not CSS-module imports.
What this rule reportsโ
This rule reports global stylesheet imports inside Docusaurus component and page modules.
Examples include:
import "./Hero.css";import "@site/src/css/custom.css";
Why this rule existsโ
Docusaurus distinguishes between site-wide global styles and component-scoped styles.
The Docusaurus styling docs recommend:
- loading truly global site styles through
theme.customCssor client modules - using CSS modules for component/page-local styling
Importing global styles directly into page and component source files makes style scope harder to reason about and can create hidden cross-page coupling.
โ Incorrectโ
import "./Hero.css";
export default function Hero() {
return null;
}
โ Correctโ
import styles from "./Hero.module.css";
export default function Hero() {
return <section className={styles.hero}>Hero</section>;
}
Behavior and migration notesโ
This rule reports only. It does not autofix.
Converting a global stylesheet import into a CSS-module workflow usually requires coordinated changes:
- rename the stylesheet file to
*.module.css(or*.module.scss/*.module.sass) - switch call sites from string class names to
styles.className - or move the stylesheet to global loading through
theme.customCssor a client module if it really is site-wide
Additional examplesโ
โ Incorrect โ importing global custom CSS from a page moduleโ
import "@site/src/css/custom.css";
export default function HomePage() {
return null;
}
โ Correct โ keep global CSS in Docusaurus configโ
const config = {
presets: [
[
"classic",
{
theme: {
customCss: "./src/css/custom.css",
},
},
],
],
};
export default config;
ESLint flat config exampleโ
import docusaurus2 from "eslint-plugin-docusaurus-2";
export default [docusaurus2.configs.strict];
When not to use itโ
Do not use this rule if your project intentionally relies on global stylesheet imports inside page or component modules and that styling model is working for your team.
Rule catalog ID: R006