我的设置是:
$ 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上的某些东西来启用对此功能的支持?)。感谢您的帮助,并在此期间继续检查文档等。
答案 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