babel polyfill
# babel polyfill
babel 的编译不会做 polyfill。那么 polyfill 是指什么呢?
const foo = (a, b) => {
return Object.assign(a, b);
};
当我们写出上面这样的代码,交给 babel 编译时,我们得到了:
'use strict';
var foo = function foo(a, b) {
return Object.assign(a, b);
};
arrow function 被编译成了普通的函数,但仔细一看 Object.assign
还牢牢的站在那里,而它作为 es2015 的新方法,并不能运行在相当多的浏览器上。为什么不把 Object.assign 编译成 (Object.assign||function() { /*...*/})
这样的替代方法呢?好问题!编译为了保证正确的语义,只能转换语法而不是去增加或修改原有的属性和方法。所以 babel 不处理 Object.assign 反倒是最正确的做法。而处理这些方法的方案则被称为 polyfill。