core-js

可以从以下四个方面理解core-js

  • 是一个js标准库的polyfill,其支持
    • 最新的 es 标准
    • es 标准的提案
    • web standard
  • 最大程度的模块化,可以只引入需要的部分
  • 可以被使用而不污染全名命名空间

core-js 最新也是推荐版本为 core-js@3, 其又分为三个包

  • core-js定义了全局的 polyfill
  • core-js-pure 不污染全局变量的版本,主要只有在版本3才实现了实例方法
  • core-js-bundle 打包后的 core-js,是一个独立的文件

最佳 Polyfill 方案

侵入性最小,工程化、自动化程度最高,业务影响最低

  1. 手动打补丁

    • es5-shim

    • es6-shim

    • Babel-polyfill结合@babel/preset-env + useBuiltins(entry) + preset-env targets 的方案

      {
      "presets": [
      [
      "@babel/env", {
      useBuiltIns: 'entry',
      target: { chrome: 44 }
      }
      ]
      ]
      }

      在工程代码处这样引用

      import '@babel/polyfill'

      会被编译为

      import "core-js/xxxx/xxxx"
      import "core-js/xxxx/xxxx"
  2. 在线动态打补丁

    • polyfill.io

一个趋于完美的 polyfill 设计应该满足的核心原则是按需加载补丁

  • 按照用户终端环境
  • 按照业务代码使用情况