ES6休息参数不适用于babel

时间:2016-01-18 22:18:20

标签: javascript ecmascript-6 babeljs variadic-functions transpiler

我正在以最简单的方式使用ES6 rest参数:

function func(a, ...b) {
  for (var i = 0; i < b.length; i += 2) {
    console.log(b[i], b[i + 1]);
  }
} 

我已经安装了babel-preset-es2015,我的.babelrc文件只有:

{
  "presets": ["es2015"]
}

奇怪的是,结果输出是:

"use strict";

function func(a) {
  for (var i = 0; i < arguments.length; i += 2) {
    console.log(arguments[i], arguments[i + 1]);
  }
}

我在https://phabricator.babeljs.io/T7000提交了一个错误,但我非常担心,因为这是我第二次使用Babel 6进行错误的基本ES6转换。我的设置是否已损坏? Babel 6是否在某处记录为不稳定/ alpha?或者这个非常受欢迎的模块真的那么糟糕吗?是否有任何备用的ES6转换器用编译器级严格和全面的测试套件编写,可以安全使用?

3 个答案:

答案 0 :(得分:1)

您正在寻找的转换是http://babeljs.io/docs/plugins/transform-object-rest-spread/,它不是babel-preset-es2015的一部分,但是babel-preset-stage-2的一部分,或者您可以自行安装。

答案 1 :(得分:1)

这是我发现的。

预设是转换插件的集合,所有转换插件都使用^进行版本控制。看起来随着这些转换版本的出现,预设的新版本不会发布。对于已知可以协同工作的策划插件集来说,它不是一个好的来源。所以在我的情况下,尽管事实上我有最新的babel-preset-es2015,并且新版本不存在,但这并不意味着我也拥有所有最新的插件。

强制更新版本的组成插件为我解决了这个问题。预设版本显然没有任何用处。如果您没有直接依赖插件本身,强制它们更新的唯一方法是强制重新安装预设。

答案 2 :(得分:1)

我有与Jacob相同的ES6休息参数问题。我按照yaycmyk的建议做了npm install babel-preset-stage-2,然后改变了我的gulp文件  pipe(babel({ presets: ['es2015'] }))来  pipe(babel({ presets: ['es2015', 'stage-2'] }))我以愉快的方式去了。