polyfill 是什么

补丁,例如,Array.prototype.indexOf 在早期并不是所有浏览器都支持的。需要写补丁。

  1. // 实现indexof的polyfill
  2. if(!Array.prototype.indexOf) {
  3. // 实现逻辑省略...
  4. Array.prototype.indexOf = function(Object, max, min){ /* 具体逻辑省略 */ }
  5. }

core-js和regenerator

core-js 是一个标准库,集成了ES6+ 新语法的polyfill。但是有一个语法不支持。

  1. // ES6 generator函数(处理异步),但是大部分人都使用async/await
  2. function* tell() {
  3. console.log('执行a处理');
  4. yield 'a';
  5. console.log('执行b处理');
  6. yield 'b';
  7. console.log('执行c处理');
  8. yield 'c';
  9. }
  10. let k = tell()
  11. console.log(k.next());
  12. console.log(k.next());
  13. console.log(k.next());
  14. console.log(k.next());

但是babel为了所有的都支持,于是还需要引入 regenerator。

babel-polyfill 即两者的集合

  • Babel 7.4 之后弃用 babel-polyfill
  • 推荐直接使用 core-js 和 rengenerator