Javascript 如何在我的gulpfile.babel.js中使用ES2016/ES7提案进行异步/等待

Javascript 如何在我的gulpfile.babel.js中使用ES2016/ES7提案进行异步/等待,javascript,gulp,babeljs,Javascript,Gulp,Babeljs,我有一个非常简单的gulpfile.babel.js import 'babel-polyfill' let y = ()=>{return Promise.resolve(true)} async function awaitY() { let m = await y() console.log(m) } awaitY() 以及my package.json中的以下开发依赖项 "babel-core": "^6.7.4", "babel-polyfill": "^6.7.

我有一个非常简单的gulpfile.babel.js

import 'babel-polyfill'

let y = ()=>{return Promise.resolve(true)}

async function awaitY() {
  let m = await y()
  console.log(m)
}

awaitY()
以及my package.json中的以下开发依赖项

"babel-core": "^6.7.4",
"babel-polyfill": "^6.7.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-stage-0": "^6.5.0"
下面是我的.babelrc

{
  "presets": ["es2015","stage-0"]
}
当我运行gulp时,我得到以下错误

MacBook-Pro-2:gulptest jschlesser$ gulp
[15:26:17] Requiring external module babel-core/register
/Users/jschlesser/Dropbox (Personal)/prj/cursive/spout/gulptest/gulpfile.babel.js:4
  var ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
                              ^

ReferenceError: regeneratorRuntime is not defined
    at /Users/jschlesser/Dropbox (Personal)/prj/cursive/spout/gulptest/gulpfile.babel.js:4:31
    at Object.<anonymous> (gulpfile.babel.js:5:16)
    at Module._compile (module.js:435:26)
    at loader (/Users/jschlesser/Dropbox (Personal)/prj/cursive/spout/gulptest/node_modules/babel-register/lib/node.js:126:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/jschlesser/Dropbox (Personal)/prj/cursive/spout/gulptest/node_modules/babel-register/lib/node.js:136:7)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Liftoff.handleArguments (/Users/jschlesser/.npm-packages/lib/node_modules/gulp/bin/gulp.js:116:3)
MacBook-Pro-2:gulptest jschlesser$
MacBook-Pro-2:gulptest jschlesser$gulp
[15:26:17]需要外部模块巴别塔核心/寄存器
/Users/jschlesser/Dropbox(Personal)/prj/cursive/spout/gulptest/gulpfile.babel.js:4
var ref=_asyncToGenerator(registratorRuntime.mark)(函数_callee(){
^
ReferenceError:未定义regeneratorRuntime
at/Users/jschlesser/Dropbox(Personal)/prj/cursive/spout/gulptest/gulpfile.babel.js:4:31
在物体上。(gulpfile.babel.js:5:16)
在模块处编译(Module.js:435:26)
在加载程序中(/Users/jschlesser/Dropbox(Personal)/prj/cursive/speut/gulptest/node_modules/babel register/lib/node.js:126:5)
at Object.require.extensions.(匿名函数)[as.js](/Users/jschlesser/Dropbox(Personal)/prj/cursive/spout/gulptest/node_modules/babel register/lib/node.js:136:7)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:311:12)
at Module.require(Module.js:366:17)
根据需要(module.js:385:17)
在Liftoff.handleArguments(/Users/jschlesser/.npm packages/lib/node_modules/gulp/bin/gulp.js:116:3)
MacBook-Pro-2:gulptest jschlesser$
我想知道在gulpfile中使用async/await需要哪些步骤。错误表明gulp使用require钩子通过babel运行gulpfile,并将异步函数转换为生成器

它说错误在第4行。
var ref=\u asyncToGenerator(registratorRuntime.mark(函数_callee(){


但它似乎没有将所有正确的内容注入到编译文件中以使用regeneratorRuntime。

您需要有一个单独的入口点来加载polyfill,然后加载主应用程序文件

gulpfile.babel entry.js

import 'babel-polyfill'
import './gulpfile.babel.js'
let y = ()=>{return Promise.resolve(true)}

async function awaitY() {
  let m = await y()
  console.log(m)
}

awaitY()
gulpfile.babel.js

import 'babel-polyfill'
import './gulpfile.babel.js'
let y = ()=>{return Promise.resolve(true)}

async function awaitY() {
  let m = await y()
  console.log(m)
}

awaitY()

另一种方法是提供
babel polyfill
作为
gulp
参数


$gulp——需要babel polyfill

这很有效。我将我的gulpfile.babel.js的所有内容移动到main.gulpfile.babel.js中,并添加了一条语句
import./main.gulpfile.babel.js'
,但是,我还能够将.babeblrc文件更改为不使用stage-0预设,而是使用插件条目
“plugins”:[“transform regenerator”,“语法异步函数”]
但是在预设中省略了stage-0。这也可以工作,同时不需要将gulpfile的“主要”部分放在不同的模块/文件中。我尝试了stage-0预设和插件条目,但是没有第二个模块它就无法工作。谢谢你,LaggingReflect的快速回复。我认为你的解决方案更好比起去掉stage-0预置,因为虽然有1个级别的间接导入,但总的来说,这比移除stage-0预置并包含单个插件的好处更大。如果我想使用stage-0中包含的更多功能,那么从长远来看就不会那么麻烦了。你的解决方案有我的投票权。希望我有更多的代表,这样我就可以了投票表决。