Javascript Array.prototype.values()未定义-使用Babel在NodeJS环境中传输ES6
我的设置是:Javascript Array.prototype.values()未定义-使用Babel在NodeJS环境中传输ES6,javascript,node.js,ecmascript-6,babeljs,Javascript,Node.js,Ecmascript 6,Babeljs,我的设置是: $ babel --version 6.3.15 (babel-core 6.3.15) $ node --version v5.1.0 在这种情况下,使用Webstorm 11 IDE也很重要 我正在使用Babel(js)传输以下ES6,并设置了一些日志来验证: Array.from([ 'a', 'b' ].keys()); Array.from([ 'a', 'b' ].values()); // TypeError: ["a","b"].values is not a
$ babel --version
6.3.15 (babel-core 6.3.15)
$ node --version
v5.1.0
在这种情况下,使用Webstorm 11 IDE也很重要
我正在使用Babel(js)传输以下ES6,并设置了一些日志来验证:
Array.from([ 'a', 'b' ].keys());
Array.from([ 'a', 'b' ].values()); // TypeError: ["a","b"].values is not a function
Array.from([ 'a', 'b' ].entries());
可以快速验证此v:
Array.prototype.values === undefined) // true
请注意,键和条目都存在
你知道可能的原因是什么吗?(我是否错过了Babel上的一个特殊选项标志或其他东西来开启对该功能的支持?)。感谢您的帮助,同时将继续检查文档等。提供完整性答案。BabelJS需要一个额外的polyfill包来扩展它,使其具有一些额外的ES6+功能,如本问题中的功能
npm install babel-polyfill --save
然后在受影响模块顶部插入以下require语句,以获得所需(发电机)行为:
require("babel-polyfill");
这应该是您所需要的全部,只需导入模块即可添加所需的polyfill我知道,您接受了答案,但我强烈建议使用node.js 有了这个库,您将忘记在JS特性支持方面遇到的任何问题。 它包括ECMAScript 5、ECMAScript 6的多填充:承诺、符号、集合、迭代器、类型化数组、ECMAScript 7+建议、setImmediate等。还有一些附加功能,如字典或扩展部分应用程序 安装和使用依赖关系很容易:
npm i core-js --save
然后在您的项目中,以这种方式使用它,以包括它支持的所有功能:
// Without global namespace pollution
var core = require('core-js/library');
或者像这样,如果您只想包含特定的功能(在您的示例中,您缺少Array.prototype.values()):
在我自己发现这个库之后,这个库对我来说是每个项目的“必备品”。包装说明可在官方页面找到:您必须手动要求polyfill感谢Paolo,现在查看。您可能希望将您的评论放在一行回答中,这样我就可以相信您的评论是否有效。为了防止另一个功能缺失,您应该查看;)太好了,谢谢,这就是解决方案。摩卡咖啡测试全部通过-谜团解开。干杯@朱利奥贝塔-谢谢,我打开了那个链接,但我没有完全理解“巴贝尔+核心JS”的含义。非常好的建议。谢谢你的回答。我对它投了更高的票,因为它看起来是个不错的选择。我意识到巴贝尔在内部依赖于这个库,所以现在我将保留被接受的答案。如果更多的选民选择这个答案,那么我很乐意将其作为正确答案。正如Arceldon已经说过的,babel polyfill使用core js本身,并加载所有需要的额外运行时(如再生器)。
require('core-js/fn/array/values');