资源合并与压缩应在构建阶段自动完成,推荐Gulp(轻量定制)、Webpack(中大型模块化)或FIS/gulp-cmd-build(CMD老项目),统一用npm scripts封装命令,并权衡缓存与调试。

资源合并与压缩完全可以在构建阶段自动完成,关键在于选对工具链、配好任务流程,并把规则固化进构建脚本里。不需要手动拖文件、复制粘贴或点在线压缩网站,一次配置,长期受益。
用 Gulp 实现 CSS/JS 合并与压缩
Gulp 适合轻量级项目或需要高度自定义流程的场景。它通过插件组合完成串联任务:
-
CSS 处理:用
gulp-sass编译 Sass,gulp-concat合并多个 CSS 文件,再用gulp-clean-css压缩输出; -
JS 处理:用
gulp-uglify或gulp-terser(支持 ES6+)压缩,配合gulp-sourcemaps生成映射文件便于调试; -
自动化触发:在
gulp.watch()中监听源文件变化,保存即执行合并压缩,开发时用未压缩版,生产时切到压缩版。
Webpack 一键打包带优化
Webpack 更适合中大型项目,天然支持模块化依赖分析,合并压缩是默认能力之一:
- 所有
import或require的 JS/CSS/图片等资源,都会被自动识别、解析、合并进 chunk; - 生产模式(
mode: 'production')下,css-minimizer-webpack-plugin和terser-webpack-plugin默认启用,自动压缩 CSS 与 JS; - 通过
optimization.splitChunks可精细控制公共代码提取逻辑,比如把lodash和业务代码分开打包,兼顾复用性与缓存效率。
FIS 或 gulp-cmd-build 处理 CMD 模块项目
针对仍在使用 Sea.js + CMD 规范的老项目,不能直接套用 Webpack,但仍有成熟方案:
-
gulp-cmd-build能静态分析define和require,自动排序依赖、合并模块、剔除未引用代码,并保留模块加载语义; - FIS 内置
fis release --optimize --md5,一条命令完成资源压缩、合并、加版本号(解决缓存问题),连路径引用都会自动更新; - 它们都不强制改变原有写法,适配成本低,特别适合遗留系统渐进式优化。
统一用 npm scripts 封装构建命令
无论底层用哪个工具,对外都应提供简洁可记的命令:
-
"dev": "gulp dev"或"dev": "webpack serve"—— 启动本地服务,带热更新; -
"build": "gulp build"或"build": "webpack --mode production"—— 执行完整构建:编译 → 合并 → 压缩 → 输出 dist; -
"build:css": "sass src/scss:dist/css --style=compressed && postcss dist/css/*.css -d dist/css"—— 单独处理样式,适合快速验证。
不复杂但容易忽略:合并压缩不是“越狠越好”,要权衡首屏加载、缓存粒度和调试便利性。比如把所有 JS 合成一个文件,看似请求数少了,但只要改一行代码,整个文件缓存就失效;合理分包、按需加载,才是可持续的自动化策略。


















