<p>SCSS的//注释被完全丢弃,因为Dart Sass在词法分析阶段就将其视为非输出内容直接跳过,不生成token、不进入AST;而/ /是CSS合法语法,会被保留并参与输出逻辑。</p>

SCSS 的 // 注释为什么被完全丢弃
因为 Sass 编译器(Dart Sass)在词法分析阶段就把 // 当作“非输出内容”直接跳过,不进入 AST 构建流程。它不是被“删除”,而是压根没被当作需要处理的样式节点——连 token 都不算。
这和 CSS 原生的 /* */ 有本质区别:/* */ 是 CSS 合法语法的一部分,Sass 必须保留其语义(比如版权、插值、/*! */ 强制保留),所以会生成 comment 节点并参与输出逻辑。
// 注释的适用场景与风险
适合写开发期临时说明、调试标记、分支条件备注等纯源码层信息。但要注意:
- 它不能用于文档生成工具(如 SassDoc)提取 API 说明,那些工具只扫描
/** */块注释 - 如果你在
@mixin或@function上方只写//,IDE 无法识别为文档注释,参数悬停提示为空 - 误把
//写成/*开头但没闭合(如/* TODO: fix this),会导致后续整段代码被吞掉,报错位置偏移
压缩模式下 /* */ 和 /*! */ 的行为差异
--style=compressed 只影响 /* */ 的输出策略,对 // 完全无感——后者早已消失。
立即学习“前端免费学习笔记(深入)”;
具体表现:
-
/* 这是普通块注释 */→ 在expanded或compact模式下保留;在compressed下被移除 -
/*! 这是重要注释 */→ 所有模式下都保留,包括compressed,常用于 license 声明 -
// 这是 silent 注释→ 所有模式下都不出现,无论你用什么--style
真正要控制注释输出,得从构建链路看
很多人以为改 --style=compressed 就能“清空所有注释”,结果发现 CSS 里还有残留——那大概率是:
- 源文件里混用了
//和/* */,而你只盯着命令行参数,没检查 SCSS 文件本身 - 用了 Webpack/Vite 等工具,但
sassOptions里没透传style,实际走的是默认expanded - 注释来自第三方库(比如
@import 'bourbon';),它们内部用的是/*! */,你删不掉 - 某些构建插件(如
postcss-discard-comments)在 Sass 之后又加了一层注释过滤,反而让/*! */也被干掉了
最稳的做法:把需要进生产环境的注释统一用 /*! */,其余全部用 //;再确认构建工具是否真正把 --style=compressed 传给了 Dart Sass 实例——这点最容易被忽略。


















