使用bable首先必装的几个插件:npm i babel-loader @babel/core @babel/preset-env webpack webpack-cli -D

@babel/preset-env使用

此babel插件内部已集成了babel6.x时的部分插件,能根据运行环境为代码做相应编译,通过browserslist或targets选项解析需要支持的目标环境,根据环境将源代码转译为目标代码。

此外,@babel/preset-env不包含state-x的一些插件,只支持state-4的js语法。

相较babel6.x版本,此插件的一大特点是通过配置useBuiltIns选项可替换@babel/plugin-transform-runtime的使用。

主要配置

  • targets,设置支持环境
  1. {
  2. "presets": [ //执行顺序:倒序, 从最后一项开始执行
  3. ["@babel/env", {
  4. "targets": {
  5. //只支持在市场中占比大于1%份额的浏览器,主流浏览器的最后两个版本
  6. "browsers": ["> 1%","last 2 versions", "not dead"]
  7. }
  8. }]
  9. ]
  10. }

其中设置浏览器的支持环境也可以在package.json中设置browserslist选项,其优先级为targets.browsers > package.json/browserslist

  1. //package.json
  2. {
  3. "browserslist": [
  4. "> 1%",
  5. "last 2 versions",
  6. "not dead"
  7. ]
  8. }
  • modules, 设置模块转化规则

该选项默认为commonjs,即,在编译过程中会将ES6的important转为require 建议将该选项设置为false,这样设置表示模块的转化将交由webpack来处理,通过其TreeShaking特性将有效减少打包出来的JS文件体积。

  • useBuiltIns, 这是配置是处理polyfill的关键

该选项默认为false,表示不对polyfill做处理。当使用ES6+语法及API时,在不支持的环境下会报错。在这种情况下需要通过其他插件来做处理。

关于@babel/preset-stage-x的使用说明

  1. stage的包含顺序如下所示:左边包含右边的全部特性,即stage-0包含右边stage-1stage-2stage-3stage-4的所有插件
  2. stage-0 > ~1 > ~2 > ~3 > ~4

此插件和@babel/preset-env的区别:@babel-preset会根据预设的浏览器兼容列表从stage-4中选取必须的plugin,也就是说,如不引入stage-x,@babel/preset-env将只支持到stage-4。

  • 建议
    • 如果是react用户,建议配到@babel/stage-0
    • 通常使用建议配到@babel/stage-2

关于babel的使用可参考以下两篇文章:

文章一 文章二

  1. //.babelrc配置文件
  2. //使用@babel/polyfill和@babel/plugin-transform-runtime,这两个是互斥的。目的都是为了解决下一代js语法浏览器兼容性。
  3. //一般我们写业务的时候,建议使用@babel/polyfill,而在编写组件库的时候,
  4. //则使用@babel/plugin-transform-runtime
  5. {
  6. "presets": [
  7. [
  8. "@babel/preset-env",
  9. {
  10. "targets": {
  11. },
  12. "useBuiltIns": "useage"
  13. }
  14. ]
  15. ],
  16. "plugins": [
  17. [
  18. "@babel/plugin-transform-runtime",
  19. {
  20. "absoluteRuntime": false,
  21. "corejs": false,
  22. "helpers": true,
  23. "regenerator": true,
  24. "useESModules": false
  25. }
  26. ]
  27. ]
  28. }
  1. }<br /> ]<br /> ]<br />}