Array.prototype.values()未定义-使用Babel在NodeJS环境中转换ES6

Array.prototype.values() is undefined - using Babel to transpile ES6 in NodeJS environment

本文关键字:NodeJS 环境 ES6 转换 Babel 使用 values prototype 未定义 Array      更新时间:2023-09-26

我的设置是:

$ 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("babel-polyfill");

这应该是您所需要的,只需导入模块即可添加所需的polyfill

我知道,你接受了答案,但我强烈建议使用node.js的core-js标准库。

有了这个库,你就不会再看到JS功能支持方面的任何问题了。它包括ECMAScript 5、ECMAScript6的polyfill:承诺、符号、集合、迭代器、类型化数组、ECMASscript 7+建议、setImmediate等。一些附加功能,如字典或扩展的部分应用程序。

安装依赖项并使用它很容易:

npm i core-js --save

然后在你的项目中,以这种方式使用它,包括它支持的所有功能:

// Without global namespace pollution 
var core = require('core-js/library');

或者像这样,如果你只想包括特定的功能(在你的情况下,你缺少Array.prototype.values()):

require('core-js/fn/array/values');

在我自己发现这个库之后,这个库对我来说是每个项目的"必备品"。包装说明可在官方页面找到:https://www.npmjs.com/package/core-js