语法降级和代码压缩指南
快速开始
单文件快速转换
bash
# 一行命令完成ES6→ES5转换
npx babel src\my.js --presets=@babel/preset-env --out-file my.es5.js这个命令会:
- 自动下载所需工具
- 将现代 JavaScript 语法转换为 ES5
- 输出兼容性更好的代码
常用转换场景
1. 基础语法转换
bash
# 转换ES6+特性为ES5
npx babel input.js --presets=@babel/preset-env --out-file output.js转换内容:
- 箭头函数 → 普通函数
- const/let → var
- 模板字符串 → 字符串拼接
- 解构赋值 → 传统赋值
- class 语法 → prototype
2. 兼容老浏览器
bash
# 兼容IE11等老浏览器
npx babel input.js --presets='["@babel/preset-env",{"targets":{"ie":"11"}}]' --out-file output.js3. 带 Polyfill 的完整转换
bash
# 安装依赖
npm install --save core-js regenerator-runtime
# 转换命令
npx babel input.js --presets='["@babel/preset-env",{"targets":{"ie":"11"},"useBuiltIns":"usage","corejs":3}]' --out-file output.js代码压缩优化
使用 Terser 压缩
bash
# 安装Terser
npm install -g terser
# 压缩JavaScript文件
terser input.js --compress --mangle --output output.min.js构建完整流水线
bash
# 1. 语法降级
npx babel src\main.js --presets=@babel/preset-env --out-file dist\main.es5.js
# 2. 代码压缩
terser dist\main.es5.js --compress --mangle --output dist\main.min.js
# 3. 查看效果
dir dist\main.*实用技巧
1. 在线转换工具
- Babel REPL: https://babeljs.io/repl
- 无需安装,粘贴代码即可转换
2. 批量转换
bash
# 转换整个目录
npx babel src --out-dir lib
# 转换多个文件
npx babel src/*.js --out-dir lib3. 保留函数名(调试用)
bash
# 压缩时保留函数名
terser input.js --compress --mangle keep_fnames=true --output output.js常见问题解决
1. 异步函数支持
如果代码包含 async/await,需要添加 regeneratorRuntime:
html
<!-- 在HTML中添加 -->
<script src="https://cdn.jsdelivr.net/npm/regenerator-runtime/runtime.js"></script>2. 新 API 支持
对于 fetch、Promise 等新 API,需要 polyfill:
bash
npm install --save whatwg-fetch es6-promise3. 检查转换结果
bash
# 对比文件大小
dir *.js何时使用不同方案
临时转换
bash
# 使用npx,无需安装
npx babel file.js --presets=@babel/preset-env --out-file file.es5.js项目开发
bash
# 全局安装,提高速度
npm install -g @babel/cli @babel/core @babel/preset-env
babel src --out-dir lib生产构建
bash
# 完整流程:转换 → 压缩 → 优化
npx babel src\app.js --presets=@babel/preset-env --out-file temp.js
terser temp.js --compress --mangle --output app.min.js
del temp.js