postcss-import: сборка из нескольких файлов
Когда стилей становится много, их удобно разложить по файлам: базовые стили отдельно, карточка поста отдельно. Обычный @import в CSS заставляет браузер скачивать каждый файл отдельным запросом. Плагин postcss-import выполняет @import при сборке: подставляет содержимое файлов на место команд, и браузер получает один файл.
Установка
npm install --save-dev postcss-importПлагин ставится первым в списке — остальные должны получить уже склеенный CSS:
// postcss.config.js
import postcssImport from 'postcss-import';
import postcssPresetEnv from 'postcss-preset-env';
export default {
plugins: [postcssImport(), postcssPresetEnv()],
};Разбиение на файлы
Разложите стили блога так:
blog/
├── styles/
│ ├── main.css ← точка входа
│ ├── base.css
│ └── post-card.css
└── postcss.config.jsСоздайте styles/base.css и styles/post-card.css:
/* styles/base.css */
body {
margin: 0;
font-family: system-ui, sans-serif;
}/* styles/post-card.css */
.post-card {
padding: 16px;
border-radius: 8px;
}В styles/main.css подключите их в начале файла:
/* styles/main.css */
@import "./base.css";
@import "./post-card.css";
.post-list {
display: grid;
gap: 16px;
}Чтобы увидеть работу самого postcss-import, временно оставьте в plugins только его и выполните npx postcss styles/main.css -o css/main.css:
body {
margin: 0;
font-family: system-ui, sans-serif;
}
.post-card {
padding: 16px;
border-radius: 8px;
}
.post-list {
display: grid;
gap: 16px;
}Вместо команд @import — содержимое файлов в том же порядке. Обрабатывать нужно только main.css: остальные попадут в него сами. Верните postcss-preset-env в список — он обработает уже склеенный файл, и объявления @custom-media из любого подключённого файла будут видны везде.
CSS из пакетов npm
postcss-import ищет файлы и в node_modules. Например, сброс стилей modern-normalize:
npm install modern-normalize/* styles/main.css */
@import "modern-normalize";
@import "./base.css";
@import "./post-card.css";Имя пакета без пути — плагин сам найдёт его CSS-файл. В css/main.css первым окажется код modern-normalize.
В Vite не нужен
Vite склеивает @import сам, поэтому в проекте на Vite postcss-import не ставят. Плагин нужен, когда вы запускаете PostCSS через postcss-cli.
Частая ошибка
Поставить @import после правил. По стандарту CSS все @import должны идти в самом начале файла. postcss-import выведет предупреждение @import statements must precede all other statements и выбросит такой импорт из результата. Держите все @import первыми строками файла.