根本原因是rollup默认跳过.css文件,插件未被识别为该后缀的handler;常见卡点:未配extract、入口无import语句、未设output.assetfilenames。

为什么 import './style.css' 后没生成 CSS 文件?
根本原因:Rollup 默认跳过所有 .css 文件,插件必须被显式识别为该后缀的 handler,否则静默忽略。最常见三个卡点:
-
postcss()配置里没写extract: true或extract: 'dist/index.css'—— 不加这个,CSS 只会内联到(仅限浏览器环境),不会落地为文件 - 入口 JS 文件里压根没写
import './style.css',插件根本不会触发 -
output.assetFileNames没配,生成的 CSS 被塞进dist/bundle.js里,看着像“没打包成功”
如何用 rollup-plugin-postcss 正确提取独立 CSS?
这是目前最主流、也最易踩坑的选择。关键不是装上插件,而是让 CSS 真正“脱离 JS 模块链”单独输出。
- 必须显式配置
extract:设为true(自动命名)或字符串路径(如'dist/style.css') - 搭配
output.assetFileNames控制输出位置,避免和 JS 冲突:assetFileNames: 'assets/[name]-[hash][extname]' -
plugins选项只接受函数数组,不能直接塞对象:plugins: [ require('autoprefixer')(), require('cssnano')() ] - 不依赖
postcss.config.js自动加载——rollup-plugin-postcss 默认不读它,除非你传空配置并启用自动加载逻辑(不可靠)
想支持 CSS Modules 还要额外配什么?
默认只认 .module.css 后缀,但你可以主动接管所有 CSS 的模块化行为。
- 启用模块化:
modules: { generateScopedName: '[name]_[local]_[hash:base64:5]' } - 把非标准命名也纳入:
include: ['**/*.css', '**/styles.css'] - 导出类名时用
exportLocalsConvention: 'camelCase',避免生成冗余对象包装 - 如果只是注入样式、不需要类名,就用
import './Dialog.css'(无解构),别写import styles from './Dialog.css'—— 后者在没配modules: true时,会退化成var css = "._overlay_xxx{}"这种字符串拼接
能不能同时用 rollup-plugin-import-css 和 rollup-plugin-postcss?
不能共存于同一 .css 文件路径。二者抽象层级冲突,会互相干扰。
-
rollup-plugin-import-css只做一件事:把 CSS 当字符串导入,import styles from './index.css'→styles是纯字符串 - 它不走 PostCSS 流程,不支持
modules、extract、@import展开,也不生成独立 CSS 文件 - 适合极简 runtime 注入场景;Library 打包中应避免使用,因无法产出下游可直接
<link>的 CSS 文件
真正卡住体积和作用域的,从来不是插件选得对不对,而是你有没有切断 JS 模块对 CSS 的隐式双重依赖——比如一个 import 语句,既触发样式注入,又悄悄把整份 CSS 编译成字符串塞进 bundle。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











