我使用Rollup和Babel将ES2017
JavaScript(特别是async/await
函数)转换为ES5
时出错:
使用'babel'插件转换\ src \ index.js时出错:选项 传递给{“modules”:false} \ node_modules \ babel-preset-es2017 \ lib \ index.js不接受 选项。
我的.babelrc
文件:
{
"presets": [
"es2017"
],
"plugins": [
"transform-runtime"
],
"comments": false
}
当然,如果我将presets
从es2017
更改为es2015
并注释掉async/await
代码,则错误就会消失。
请注意,虽然应用程序使用ES2017
功能(即async/await
),但它会作为NPM包发布(作为ES6 (ES2015)
模块),稍后会将其转换为通用{{1 }}
如何解决此错误并让ES5 (ES2009)
愉快地转发到ES2017
?
答案 0 :(得分:1)
您提供的实际配置似乎是:
{
"presets": [
"es2017", {modules: false}
],
"plugins": [
"transform-runtime"
],
"comments": false
}
您应该删除{modules: false}
的{{1}}选项,该选项不接受任何内容,因为它适用于babel-preset-es2017
。
答案 1 :(得分:0)
在es2015
文件中定位.babelrc
:
"presets": [
"es2015"
],
并首先添加Rollup Async functions plugin预处理es2017
功能,其中:
用可以运行的生成器函数替换异步函数 现代浏览器或捆绑期间大多数版本的node.js
添加到您的项目:
npm install --save-dev rollup-plugin-async
然后在async
之前将rollup.config.js
预处理插入到babel()
插件数组中:
import async from 'rollup-plugin-async';
...
plugins: [
async(),
babel(babelrc())
],
在this Rollup Github issues thread中找到了关键洞察力,其中@Victorystick证实了这一点(截至2016年10月10日):
Rollup目前仅针对ES6,尽管它可能会得到扩展 很快就到了ES7。目前,如果您使用> ES6功能,他们将需要 转化为Rollup处理它们
由于async / await很可能在下一版本的ECMAScript,ES2017(又名ES8)中进行标准化,因此在Babel运行之前,您需要一个额外的插件来处理它们。
注意:强>
是YMMV,但后来我在Windows 7上使用rollup-plugin-async
收到了AsyncHelper not found run time Errors,所以我的解决方案是(npm uninstall --save-dev rollup-plugin-async
和)回滚使用async/await
以支持{在我的代码库中{3}}。