# 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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
实现了完全无污染的 API 转译,但是其暂时会增加打包体积