微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

避免导入“再生器运行时/运行时”

如何解决避免导入“再生器运行时/运行时”

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

一切正常,但在我有 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 file 中使用 import "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 之类的零配置工具:它们最终会通过创建意外行为(如您的问题)来增加您的开发时间,或者您必须花时间了解它是如何工作的。调试自己的应用程序就足够了;您也不必调试构建工具。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。