CSS环境区分依赖构建工具而非CSS本身,通过环境变量在打包时决定文件引入、压缩、Source Map等行为,开发环境启用调试样式与HMR,生产环境启用压缩与CSS提取,禁止在CSS中硬编码环境逻辑。
在 CSS 开发中,环境区分通常不直接通过 CSS 本身实现(因为 CSS 是静态样式表),而是靠构建工具(如 Webpack、Vite、Rollup)在打包阶段根据环境变量决定引入哪些文件、是否压缩、是否注入调试信息等。关键在于:CSS 文件的“切换”本质是构建流程控制,而非运行时 CSS 自行判断环境。
现代构建工具都支持 环境变量(如 process.env.NODE_ENV 或自定义变量),你可以在配置中读取它,动态决定:
ource Map、CSS HMR(热更新)、额外调试样式(如 outline 边框)MiniCssExtractPlugin)不推荐在 CSS 里写逻辑判断,但可在 JS 入口或构建配置中做条件引入。例如:
在 main.js 中:
立即学习“前端免费学习笔记(深入)”;
if (process.env.NODE_ENV === 'development') {
require('./styles/debug.css'); // 开发专用样式(如 hover 高亮、组件边框)
}
require('./styles/index.css'); // 主样式,始终引入
或在 Webpack 配置中用 DefinePlugin 注入变量,再配合 Rule.issuer 或 oneOf 匹配不同入口。
利用插件生成不同产物:
vite.config.ts 的 build.rollupOptions.output 或 css.codeSplit 控制;开发时用 css.devSourcemap: true,生产时设 minify: 'lightningcss'
MiniCssExtractPlugin 在生产环境启用(new MiniCssExtractPlugin({ filename: 'css/[name].[contenthash].css' })),开发环境仍用 style-loader 内联app.dev.css / app.prod.css),再由 HTML 模板或部署脚本选择加载CSS 本身没有 if 语句,也不该依赖 JS 环境变量运行时生效。以下做法应避免:
@media (env: development) { ... }(无效语法)(增加请求、延迟、维护成本高)真正可靠的区分,发生在构建那一刻——文件被选中、处理、输出,而不是运行时去猜。