避免导入 "regenerator-runtime/runtime"

avoiding the import "regenerator-runtime/runtime"

我正在使用 Parcel 捆绑我的项目并开玩笑 运行 我的测试。

一切正常,但在我有 async/await 关键字的测试中,我不得不导入 regenerator-runtime/runtime

像这样:

import "regenerator-runtime/runtime"

test("read armored key", async() => {

})

还有这项工作。

但是没有这个导入 (import "regenerator-runtime/runtime") 我收到了这个错误信息:

ReferenceError: regeneratorRuntime is not defined

如何在不使用异步测试导入的情况下将我的项目更改为 运行?

示例:https://github.com/skhaz/parcel-regeneratorRuntime-is-not-defined

据我所知,您可以配置 @babel/preset-env 以针对描述的当前节点版本进行编译 here 那么它应该可以工作:

.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

根据其版本,并非浏览器运行时中可用的所有功能都适用于 Node 运行时。当前版本的 node 支持 Promise(await/async,但是由于 你使用的是 Parcel,它默认使用 Babel,您的 async/await 调用将被编译为使用 regenerator-runtime,一个用于该功能的 polyfill。你可以在 every entry fileimport "regenerator-runtime/runtime" (如果你不需要 polyfill 则不推荐!),或者你可以告诉 babel 你的运行时是什么。

你应该能够让它与 @babel/preset-env 预设一起工作,在你的 .babelrc:

中像这样配置
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "10" // the target node version, boolean true, or "current".
        }
      }
    ]
  ]
}

有关为此配置 babel 的更多信息,请参阅此 Medium article


意见: 不要依赖像 Parcel 这样的零配置工具:它们最终会通过产生意外行为(比如你的问题)来增加你的开发时间,或者你必须花时间学习它是如何工作的。调试自己的应用程序就足够了;您也不必调试构建工具。

使用 Webpack 或 Parcel 时,将以下内容添加到 package.json:

"browserslist": [
  "since 2017-06"
]

"browserslist": [
  "last 3 Chrome versions"
]