babel7的polyfill

79 阅读1分钟

一般的es6语法 通过设置预设即可解决

npm install --save-dev @babel/preset-env
//babel.config.json
{
  "presets": [["@babel/preset-env"]],
}

比如这种代码,需要导入polyfill来解决

const isHas = [1, 2, 3].includes(2)
const p = new Promise((resolve, reject) => {
  resolve(100)
})

直接导入全部polyfill,通过webpack打包得到4490行

这种方式明显不得行撒,官方也不推荐了

import '@babel/polyfill'//4490行
const isHas = [1, 2, 3].includes(2)
const p = new Promise((resolve, reject) => {
  resolve(100)
})

preset-env+useBuiltIns 按需导入

  • 需要安装core-js@3+设置 "useBuiltIns": "usage"。
  • 会自动按需导入所需模块,webpack打包约1330行。
  • 缺点:会造成全局变量污染
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "edge": "17",
          "firefox": "60",
          "chrome": "67",
          "safari": "11.1"
        },
        "useBuiltIns": "usage",
        "corejs": "3"
      }
    ]
  ],
}

plugin-transform-runtime实现

  • 实现按需加载,并且不会污染全局变量
  • 打包行数1700行
npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime
npm install --save @babel/runtime-corejs3
{
  "presets": [["@babel/preset-env"]],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": 3,
        "version": "^7.22.6"
      }
    ]
  ]
}