# core-js

# 背景

作为 npm 下载量巨大的基础依赖库,却是一个被遗忘的库,作者在 npm 上打广告找工作了好久,后来飙车入狱。。。

# core-js是什么

  • 是JavaScript标准库的polyfill
  • 尽可能的进行模块化,让你能选择你需要的功能
  • 可以不污染全局空间
  • 和babel高度集成,可以对core-js的引入进行最大程度的优化

core-js 是babel-polyfill 的底层依赖,通过各种奇技淫巧,用 ES3 实现了大部分的 ES2017 原生标准库,同时还要严格遵循规范。

core-js@2 已经冻结版本了(应该是支持到 ES2017 ),不再添加新特性;

core-js@3:

  • 支持 ECMAScript 稳定功能,引入core-js@3冻结期间的新功能,比如 flat
  • 加入到 ES2016-ES2019 中的提案,现在已经被标记为稳定功能
  • 更新了提案的实现,增加了 proposals 配置项,由于提案阶段不稳定,需要谨慎使用
  • 增加了对一些 web 标准的支持,比如 URL 和 URLSearchParams
  • 支持原型方法,同时不污染原型
  • 删除了过时的特性

# 配置

# core-js@2

使用 @babel/polyfill 的方式引入。

// app.js
import '@babel/polyfill';

// babel.config.js
module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        useBuiltIns: 'entry',
        modules: false,
        corejs: 2
      }
    ]
  ],
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# core-js@3

@babel/polyfill是包含 core-js 和 regenerator-runtime 这两个包。3.0版本后,弃用 @babel/polyfill。

// app.js
import 'core-js/stable'
import 'regenerator-runtime/runtime'

// babel.config.js
module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        modules: false,
        useBuiltIns: 'entry',
        corejs: {
          version: 3, 
          proposals: true
        }
      }
    ]
  ],
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

实现了完全无污染的 API 转译,但是其暂时会增加打包体积

# 参考

上次更新: 12/3/2020, 3:11:09 PM