Babel 6 regeneratorRuntime没有定义
我试图使用asynchronous,从头开始在巴别塔6,但我越来越regeneratorRuntime没有定义。
.babelrc文件
{ "presets": [ "es2015", "stage-0" ] }
package.json文件
"devDependencies": { "babel-core": "^6.0.20", "babel-preset-es2015": "^6.0.15", "babel-preset-stage-0": "^6.0.15" }
.js文件
"use strict"; async function foo() { await bar(); } function bar() { } exports.default = foo;
通常没有asynchronous/等待使用它就好了。 任何想法我做错了什么?
babel-polyfill
是必需的。 您还必须安装它才能获得asynchronous/等待工作。
npm i -D babel-core babel-polyfill babel-preset-es2015 babel-preset-stage-0 babel-loader
的package.json
"devDependencies": { "babel-core": "^6.0.20", "babel-polyfill": "^6.0.16", "babel-preset-es2015": "^6.0.15", "babel-preset-stage-0": "^6.0.15" }
.babelrc
{ "presets": [ "es2015", "stage-0" ] }
.js与asynchronous/等待(示例代码)
"use strict"; export default async function foo() { var s = await bar(); console.log(s); } function bar() { return "bar"; }
在启动文件中
require("babel-core/register"); require("babel-polyfill");
如果你使用的是webpack,你需要把它作为@Cemen评论的第一个条目:
module.exports = { entry: ['babel-polyfill', './test.js'], output: { filename: 'bundle.js' }, module: { loaders: [ { test: /\.jsx?$/, loader: 'babel', } ] } };
如果你想用babel运行testing,那么使用:
mocha --compilers js:babel-core/register --require babel-polyfill
除了polyfill,我使用了babel-plugin-transform-runtime 。 该插件被描述为:
将引用外部化到助手和内置函数,自动填充代码而不会污染全局variables。 这究竟意味着什么呢? 基本上,您可以使用Promise,Set,Symbol等内置function,并使用所有需要无缝填充的Babelfunction,而不会造成全球污染,因此非常适合图书馆。
它还包括对asynchronous/等待以及ES 6的其他内置function的支持。
$ npm install --save-dev babel-plugin-transform-runtime $ npm install --save babel-runtime
在.babelrc
,添加运行时插件
{ "plugins": [ ["transform-runtime", { "polyfill": false, "regenerator": true }] ] }
我相信我find了最新的最佳做法。
检查这个项目: https : //github.com/babel/babel-preset-env
yarn add --dev babel-preset-env
使用以下作为你的babelconfiguration:
{ "presets": [ ["env", { "targets": { "browsers": ["last 2 Chrome versions"] } }] ] }
那么你的应用程序应该是最好的去在Chrome浏览器的最后2个版本。
您也可以将Node设置为目标或根据https://github.com/ai/browserslist微调浏览器列表;
告诉我什么,不要告诉我如何。
我非常喜欢babel-preset-env
的理念:告诉我你想支持哪种环境,不要告诉我如何支持它们。 这是声明式编程的美妙之处。
我testing了async
await
,他们工作。 我不知道他们是如何工作的,我真的不想知道。 我想把我的时间花在自己的代码和业务逻辑上。 感谢babel-preset-env
,它将我从Babelconfiguration中解放出来。
更新
如果您将目标设置为Chrome,则它可以正常工作。 但是可能不适用于其他目标,请参阅: https : //github.com/babel/babel-preset-env/issues/112
或者,如果不需要babel-polyfill
提供的所有模块,则可以在webpackconfiguration中指定babel-regenerator-runtime
:
module.exports = { entry: ['babel-regenerator-runtime', './test.js'], // ... };
与HMR一起使用webpack-dev-server时,这样做会减less在每个构build中编译的文件数量。 这个模块是作为babel-polyfill
一部分安装的,所以如果你已经有了,那么你可以用npm i -D babel-regenerator-runtime
单独安装。
如果使用babel-preset-stage-2
那么只需使用--require babel-polyfill
来启动脚本。
在我的情况下,这个错误是由Mocha
testing引发的。
解决了问题后
mocha \"server/tests/**/*.test.js\" --compilers js:babel-register --require babel-polyfill
我简单的解决scheme
npm install --save-dev babel-plugin-transform-runtime npm install babel-plugin-transform-async-to-generator --save-dev
.babelrc
{ "presets": [ ["latest", { "es2015": { "loose": true } }], "react", "stage-0" ], "plugins": [ "transform-runtime" ] }
你得到一个错误,因为asynchronous/等待使用生成器,这是一个ES2016function,而不是ES2015。 解决这个问题的方法之一是安装ES2016的预设( npm install --save babel-preset-es2016
)并编译到ES2016而不是ES2015:
"presets": [ "es2016", // etc... ]
正如其他答案中提到的,你也可以使用polyfill (尽pipe确保你在其他代码运行之前首先加载polyfill )。 或者,如果您不想包含所有的polyfill依赖关系,则可以使用babel-regenerator-runtime或者babel-plugin-transform-runtime 。
新答案为什么你按照我的答案?
答:因为我打算给你最新版本的npm项目的答案。
2017年4月14日
"name": "es6", "version": "1.0.0", "babel-core": "^6.24.1", "babel-loader": "^6.4.1", "babel-polyfill": "^6.23.0", "babel-preset-es2015": "^6.24.1", "webpack": "^2.3.3", "webpack-dev-server": "^2.4.2"
如果你使用这个版本或更多的UP版本Npm和所有其他…所以只需要改变:
webpack.config.js
module.exports = { entry: ["babel-polyfill", "./app/js"] };
更改webpack.config.js
文件之后只需将此行添加到代码顶部即可。
import "babel-polyfill";
现在检查一切正常。 参考LINK
还谢谢@BrunoLM他的不错的答案。
1 – 安装babel-plugin-transform-async-to-module-method,babel-polyfil,bluebird,babel-preset-es2015,babel-core:
npm install babel-plugin-transform-async-to-module-method babel-polyfill bluebird babel-preset-es2015 babel-core
2 – 添加你的js babel polyfill:
import 'babel-polyfill';
3 – 在.babelrc中添加插件:
{ "presets": ["es2015"], "plugins": [ ["transform-async-to-module-method", { "module": "bluebird", "method": "coroutine" }] ] }
资料来源: http : //babeljs.io/docs/plugins/transform-async-to-module-method/
我有一个设置
与webpack使用presets: ['es2015', 'stage-0']
和正在运行由webpack编译的testing的摩卡。
为了使我的async/await
testing工作,我所要做的就是添加mocha --require babel-polyfill
选项。
当我尝试使用ES6生成器时,我得到这个错误使用吞吐汇总:
gulp.task('scripts', () => { return rollup({ entry: './app/scripts/main.js', format: "iife", sourceMap: true, plugins: [babel({ exclude: 'node_modules/**', "presets": [ [ "es2015-rollup" ] ], "plugins": [ "external-helpers" ] }), includePaths({ include: {}, paths: ['./app/scripts'], external: [], extensions: ['.js'] })] }) .pipe(source('app.js')) .pipe(buffer()) .pipe(sourcemaps.init({ loadMaps: true })) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('.tmp/scripts')) .pipe(reload({ stream: true })); });
我可能会遇到的解决办法是包括babel-polyfill
作为凉亭组件:
bower install babel-polyfill --save
并将其作为依赖项添加到index.html中:
<script src="/bower_components/babel-polyfill/browser-polyfill.js"></script>
我有async等待使用webpack / babel构build:
"devDependencies": { "babel-preset-stage-3": "^6.11.0" }
.babelrc:
"presets": ["es2015", "stage-3"]