【问题标题】:ES6 rest parameter not working with babelES6 rest 参数不适用于 babel
【发布时间】:2016-04-24 05:39:12
【问题描述】:

我正在以最简单的方式使用 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 转译器,其编写的编译器级严谨性和全面的测试套件可以安全使用?

【问题讨论】:

  • 您的设置似乎有问题。我通过你的示例代码运行了 babel 并得到了an output different from yours。我有 es2015 和 stage-1 作为预设,但是否有 stage-1 并不重要。
  • 有趣。我正在使用6.3.13(最新);你用的是最新的吗?或者stage-1 是必要的?
  • babel-preset-es2015@6.3.13,babel-cli@6.4.0,babel-core@6.4.0。 rest 模块也是 6.3.13(babel-plugin-transform-object-rest-spread@6.3.13 根据 npm list)。
  • es2015 does not contain the rest module;这可能就是它无法正常工作的原因。但是,我确实认为这是一个错误,因为它应该尽早失败,而不是生成不正确、损坏的代码。
  • 它确实包含transform-es2015-parameters,其中提到了其余参数:babeljs.io/docs/plugins/transform-es2015-parameters

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


【解决方案1】:

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

【讨论】:

  • babel-preset-es2015 包括 transform-es2015-parameters,其余部分在参数中传播。事实证明,旧版本的 transform-es2015-parameters 是该错误的罪魁祸首。
【解决方案2】:

这是我发现的。

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

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

【讨论】:

  • 您使用的是 npm v3 还是 v2? npm v3 似乎更可靠地更新依赖项。
  • NPM v3,但它并不真正相关。除非有明确给出的依赖版本与当前安装的版本冲突,否则 NPM 上的任何一个版本都不会更新依赖。
【解决方案3】:

我遇到了和 Jacob 一样的 ES6 剩余参数问题。我按照 yaycmyk 的建议做了npm install babel-preset-stage-2 然后将我的 gulp 文件从 pipe(babel({ presets: ['es2015'] }))pipe(babel({ presets: ['es2015', 'stage-2'] })) 并在我快乐的路上走了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多