我正在尝试使用 K6 进行用 ClojureScript 编写的测试。 K6 用 Golang 编写,运行捆绑的 JS 运行时,该运行时又运行用 JavaScript 编写的测试。
我运行简单的测试没有问题,该测试仅在使用
(js/console.log "Hello world")
和 shadow-cljs
目标时执行 :esm
。然而,当我尝试 (:require ["k6" :as k6])
- 与 K6 工具集进行有意义的通信所需的,并且仅在运行时可用 - 编译被拒绝,并出现非常容易理解的错误消息 - “所需的 JS 依赖项“k6”不可用, “k6_test/core.cljs”需要它。”
我尝试使用
shadow.esm/dynamic-import
,但K6无法运行测试,因为import
未定义:
ERRO[0000] SyntaxError: dist/main.js: Unexpected token (3:47)
> 3 | const shadow_esm_import = function(x) { return import(x) };
| ^
而且我不知道应该更改什么来定义
import
,或者这只是 K6 JS 运行时的一个属性,我对此无能为力。
是否有其他方法可以告诉 ClojureScript 依赖项仅在运行时可用?
您可以在构建配置中设置
:js-options {:keep-as-import #{"k6"}}
。这将使 Shadow-cljs 捆绑除 k6
依赖项之外的所有内容。如果运行时可以在运行时解决该问题,那么它应该可以工作。如果需要,您可以向此集合添加更多依赖项。
如果您不打算使用任何
npm
依赖项,您也可以只设置 :js-options {:js-provider :import}
。这将使 Shadow-cljs 仅发出常规的 import
语句,而不是尝试捆绑任何非 CLJS 依赖项。