1

我以最简单的方式使用 ES6 休息参数:

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 是否在某处记录为不稳定/阿尔法?还是这个非常受欢迎的模块真的那么糟糕?是否有任何替代的 ES6 转译器用编译器级的严谨性和全面的测试套件编写,可以安全使用?

4

3 回答 3

1

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

于 2016-01-21T23:24:32.233 回答
1

这是我发现的。

预设是转换插件的集合,所有版本都使用^. 似乎随着这些转换版本的增加,新版本的预设没有发布。对于一组已知可以协同工作的插件来说,这不是一个好的来源。因此,就我而言,尽管我拥有最新babel-preset-es2015的 ,并且不存在新版本,但这并不意味着我也拥有所有最新的插件。

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

于 2016-01-22T01:29:21.890 回答
1

我遇到了和 Jacob 一样的 ES6 剩余参数问题。我按照 yaycmyk 的建议做了npm install babel-preset-stage-2,然后将我的 gulp 文件从 更改 pipe(babel({ presets: ['es2015'] }))为 , pipe(babel({ presets: ['es2015', 'stage-2'] }))并以我愉快的方式进行。

于 2016-05-07T05:21:35.130 回答