我在Babel选项/配置中有点迷失。我想使用最近的js功能并编译(使用webpack)浏览器代码。
babel-polyfill和babel plugins与babel-preset-env
之间的区别是什么?
他们打算一起工作吗?
答案 0 :(得分:17)
来自this article的答案:
babel transform plugin
与babel-polyfill / babel-runtime
之间的区别Array.from
是否可以 今天重新实现该功能,在ES5中。例如,Array.from
可以 在ES5中重写但是我无法在ES5中编写任何内容来添加 箭头函数语法到JavaScript。因此,有一个转变 对于箭头函数,但babel-polyfill
没有。它必须是 由单独的polyfill提供,如babel-runtime
,或Babel
。
作为旁注,这是我目前对巴贝尔生态系统的理解。
babel-polyfill
是一个javascript编译器:解析,转换和输出已转换的代码。
babel-runtime
和babel syntax / transform plugins
之间的区别:前者定义全局方法(并污染全局范围),而后者转换代码以使explained in this answer具有相同的功能。babel-plugins-stage-x
:解析并转换 es2015 +语法(如箭头功能),将其转换为es5。babel-plugins
(从第0阶段到第4阶段):转换未在JS规范中的未来javascript语法,从阶段0开始(只是一个想法)到第4阶段(将登陆在babel-preset-env
很快)。target
确定特定环境所需的Babel插件和polyfill。builtIn
选项,它只加载在特定目标上运行所需的插件。babel-polyfill
选项,它仅使用内置目标的babel-transform-runtime
。boolean collided(int x1, int y1, int r1, int x2, int y2, int r2)
{
return !(Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))>(r1+r2));
}
合作(截至2017年11月)。 (见this issue)答案 1 :(得分:2)
babel-preset-env是一个Babel预设,旨在自动设置babel plugins,并根据针对babel polyfills检查的一组目标环境包含必要的feature compatibility table。
为了在非ES2015 +客户端上运行完全正常运行的ES2015 +环境,简单的代码转换有时是不够的:
Promise
,Map
,Object.assign
...)与core-js进行了多方填充(由提供) babel-polyfill ,也是)所以,回到你的问题,它使用 babel-polyfill 和 babel插件 babel-preset-env >