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

时间:2015-12-08 15:01:21

标签: 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 function
Array.from([ 'a', 'b' ].entries());

可以快速验证这一点:

Array.prototype.values === undefined) // true

请注意,条目都存在。

任何想法可能的原因是什么? (我是否错过了一个特殊选项标志或Babel上的某些东西来启用对此功能的支持?)。感谢您的帮助,并在此期间继续检查文档等。

2 个答案:

答案 0 :(得分:4)

提供完整性的答案。 BabelJS需要一个额外的polyfill包,以扩展它的一些额外的ES6 +功能 - 例如这个问题中的那个。

npm install babel-polyfill --save

然后在受影响模块的顶部插入以下require语句以获取所需(生成器)行为:

require("babel-polyfill");

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

答案 1 :(得分:3)

我知道,您接受了答案,但我强烈建议您将core-js standard library用于node.js。

使用此库,您将忘记在JS功能支持方面遇到任何问题。 它包括ECMAScript 5的polyfill,ECMAScript 6:promises,符号,集合,迭代器,类型化数组,ECMAScript 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');

这个lib是一个必须拥有的"在我为自己发现它之后,对我来说每个项目。包装说明可在官方网页上找到:https://www.npmjs.com/package/core-js