在 K6 中使用 yield 时出现 SyntaxError

问题描述

我正在尝试在 k6 中使用 javascript 生成器和 yield

当我尝试运行脚本时出现此错误

SyntaxError: ...yield 是一个保留字

是否可以在 k6 中使用 yield

解决方法

遗憾的是,k6 (goja) 使用的 JavaScript VM 本身不支持此功能。根据 this comment 生成器最终可能会得到支持,但目前没有相关计划。

也就是说,您可以通过使用 template-es6 项目将脚本转换为使用 Babel 的 ES5 变体来解决此问题,这可以为生成器提供 polyfill 支持。

  1. 首先在本地克隆 template-es6 Git 存储库。

  2. 使用 yarn addnpm install 安装所有依赖项。

  3. @babel/plugin-transform-runtime 添加到 .babelrc 的插件列表中。它应该是这样的:

{
  "presets": [
    [
      "@babel/preset-env",{
        "useBuiltIns": "usage","corejs": 3
      }
    ]
  ],"plugins": [
    "@babel/plugin-transform-runtime"
  ]
}
  1. 使用 yarn add -D @babel/plugin-transform-runtimenpm install --save-dev @babel/plugin-transform-runtime 安装插件。

  2. 修改 main.js 脚本并安装您需要的任何其他依赖项。

  3. 运行 npm run-script webpack 以捆绑所有内容。

  4. 最后用 k6 和 k6 run --compatibility-mode=base build/app.bundle.js 运行脚本。 您也可以在没有 --compatibility-mode=base 的情况下运行它,但由于它已经转换为 ES5 脚本,因此您可以避免 k6 完成的额外转换,从而提高性能和内存使用率。

是的,这并不像我们希望的那么简单,但 JavaScript 开发人员应该熟悉它,我们希望在未来改进对这些功能的支持。