避免导入“regenerator-runtime/runtime”

Skh*_*haz 6 javascript jestjs babeljs parceljs

我正在使用 Parcel 来捆绑我的项目并使用 jest 来运行我的测试。

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

像这样:

import "regenerator-runtime/runtime"

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

})
Run Code Online (Sandbox Code Playgroud)

还有这个作品。

但是如果没有这个 import ( import "regenerator-runtime/runtime") 我收到了这个错误消息:

ReferenceError: regeneratorRuntime is not defined
Run Code Online (Sandbox Code Playgroud)

如何更改我的项目以在异步测试中不进行此导入的情况下运行?

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

Con*_*Low 11

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

您应该能够让它与@babel/preset-env预设一起使用,在您的以下配置中进行配置.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "10" // the target node version, boolean true, or "current".
        }
      }
    ]
  ]
}
Run Code Online (Sandbox Code Playgroud)

有关为此配置 babel 的更多信息,请参阅这篇Medium 文章:

我找到了解决我的麻烦的答案,并且当我实施它时它起作用了。


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


tmh*_*005 8

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

.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}
Run Code Online (Sandbox Code Playgroud)