必须先用gulp-less编译再用gulp-clean-css压缩,顺序不可颠倒;路径匹配需用**,监听变更须加错误捕获和plumber插件。

不能只用 gulp-less 编译完就完事——它不压缩、不加前缀、一错就中断整个构建流,批量处理时尤其容易静默失败。
必须先编译再压缩,顺序不能反
gulp-less 输出的是未压缩的 CSS,含空格、换行、冗余注释;gulp-clean-css 才负责真正压缩。两者必须串行,且顺序固定:
-
.pipe(less())必须在前,否则cleanCSS()会收到 .less 源码,直接报错 -
cleanCSS({ level: 2 })启用高级优化(如合并重复规则),比默认level: 1更省体积 - 若需兼容 IE8,加
compatibility: 'ie8';但别设'ie7',否则calc()表达式会被破坏 -
gulp-minify-css已废弃(最后更新于 2017 年),必须用gulp-clean-css
路径匹配要用 **,否则子目录里的 .less 不进流
批量处理多层结构(比如 src/less/components/button.less)时,* 只匹配一级,** 才递归:
-
'src/less/*.less'→ 只处理src/less/index.less,漏掉所有子目录 -
'src/less/**/*.less'→ 正确匹配全部,包括嵌套文件 - 排除局部文件(mixin/variable):用数组写法
['src/less/**/*.less', '!src/less/_*.less'] - 别写成
'./src/less/**/*.less'—— 某些 Node 版本下路径解析失败
监听变更必须捕获错误,否则第一次报错后就彻底失联
gulp.watch() 默认不处理子进程异常,less 编译出错(比如变量拼错)会导致后续修改完全无响应:
立即学习“前端免费学习笔记(深入)”;
- 错误写法:
gulp.watch('src/less/**/*.less', gulp.series('css'))—— 错误中断后不再触发 - 正确写法:用
.on('change', () => gulp.series('css')())显式调用,并在css任务里加.on('error', console.error) - 更稳方案是引入
gulp-plumber,在less()前加.pipe(plumber())阻断中断 - 别依赖
gulp-minify-css的旧版错误处理逻辑,它不维护了
压缩后的 CSS 体积和兼容性得手动验证
自动压缩不是“点了就完”,尤其当项目要支持老浏览器或有自定义属性时:
-
cleanCSS默认不补-webkit-前缀,得额外配less-plugin-autoprefix插件 - 启用
level: 2后,某些 CSS 自定义属性(--foo)可能被误删,建议先在小范围试压 - 输出目录别和源目录混用(比如都写
src/css),避免未压缩版覆盖压缩版 - 检查生成的
.css文件是否真变小了:对比ls -lh dist/css/*.css和原始大小
最常被跳过的其实是错误捕获和路径通配符——改完一个变量,发现页面没更新,十有八九是 watch 早就挂了,或者 ** 写成了 *。别信“跑起来就行”,批量处理必须每步可观察、可中断、可回溯。


















