这篇文章中,发现是可以借助babel的API手动把let变成var,那么

能不能自动把代码转为ES5?

可以,使用babel/corebabel/preset-env即可
@babel/core包含@babel/parser,@babel/traverse,@babel/generator

  1. import { parse } from "@babel/parser"
  2. import * as babel from "@babel/core"
  3. import * as fs from 'fs'
  4. // test.js代码在下面👇
  5. const code = fs.readFileSync('./test.js').toString()
  6. // 将原始code转为ast
  7. const ast = parse(code, { sourceType: 'module' })
  8. // transformFromAstSync接收原始ast,和原始code,生成新code
  9. const result = babel.transformFromAstSync(ast, code, {
  10. presets: ['@babel/preset-env']
  11. })
  12. // 得到es5代码,写入test.es5.js
  13. fs.writeFileSync('./test.es5.js', result.code)
  14. // test.js在这里👈
  15. // let a = 'let'
  16. // let b = 2
  17. // const c = 3

运行上面代码
「深入Webpack」将代码转为ES5 - 图1

可以发现所有letconst声明,都变成了var,其实不光是变量声明,babel.transformFromAstSync会将所以ES5不支持的语法,变成合法ES5代码