<p>Less的/ /注释编译后消失不是Less的问题,而是CSS压缩器(如css-minimizer-webpack-plugin、cssnano)默认删除所致;//注释则在Less解析阶段即被完全剥离,永不输出到CSS。</p>

Less多行注释/* */为什么编译后没了
不是Less的问题,是构建流程里的CSS压缩器干的。Less本身原样透传/* */,但css-minimizer-webpack-plugin、cssnano这类工具默认会删掉所有/* */注释——除非你明确告诉它“留着”。
哪些场景下/* */会被静默删除
常见于启用压缩的生产构建中,尤其容易被忽略的几个点:
-
webpack.config.js里minimize: true开启后,css-minimizer-webpack-plugin默认preserveComments: false - Vite 项目默认使用
esbuild或cssnano压缩 CSS,cssnanov5+ 默认移除所有非/*! */注释(注意:Less 不支持/*! */语法) - 旧版
lessc(v3.x)若检测到@{version}变量未被任何属性引用,连带其所在的/* v@{version} */也会被优化掉
如何让/* */真正保留在最终CSS里
必须在压缩器配置中显式声明保留策略,不能只靠写对注释语法:
- Webpack 中,在
css-minimizer-webpack-plugin配置里加:preserveComments: /v\d+\.\d+\.\d+|Copyright|@license/ - Vite 中若用
cssnano,需在vite.config.ts里配cssnanoOptions,设removeComments: false或用正则白名单 - 避免把版本号写成孤立变量;改用直接拼接:
/* v@{version} — built @ {date} */,并确保@{version}在当前作用域被实际引用(比如赋给body[data-version])
为什么//单行注释永远不可能出现在CSS里
//是Less源码级注释,编译器在解析阶段就整行跳过,不生成任何AST节点,更不会输出到CSS。它和JS里的//一样,纯属开发期辅助,浏览器开发者工具里根本看不到痕迹。
立即学习“前端免费学习笔记(深入)”;
容易踩的坑包括:用// .btn { color: red; }以为能禁用样式,结果既没样式也没注释;或在mixin调用后写.btn-primary { .reset(); // 重置基础样式 },编译后连空格都不剩。这种注释只对人有效,对构建流水线完全透明。
真正要上线可见的注释,必须用/* */,且必须确认压缩器没把它删掉——这是两个独立环节,少一个都白搭。


















