You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ClojureScript中编写Grafana K6测试?解决运行时依赖问题

在ClojureScript中使用shadow-cljs编写k6测试的依赖问题解决方案

问题原因

  • k6的JS运行时基于Go的V8引擎,对ES模块支持有限,不支持动态import()语法,这是使用shadow.esm/dynamic-import报错的根本原因。
  • shadow-cljs默认会尝试解析所有:require中的JS依赖,但k6工具集仅存在于k6运行时环境,本地编译阶段无法找到该依赖,因此静态引入会触发缺失报错。

解决方案

方案1:将k6标记为全局外部依赖

修改shadow-cljs.edn的构建配置,告诉shadow-cljsk6是运行时全局变量,编译时跳过依赖解析:

{:builds
 {:k6-test
  {:target :esm
   :output-dir "dist"
   :modules {:main {:entries [k6-test.core]}}
   :js-options {:resolve {"k6" {:target :global :global "k6"}}}}}}

之后即可正常通过:require引入并使用:

(ns k6-test.core
  (:require ["k6" :as k6]
            ["k6/http" :as http]))

(defn -main []
  (http/get "https://test-api.k6.io")
  (k6/sleep 1))

方案2:直接使用k6的全局API

k6的所有测试API在运行时都是全局可用的,无需引入模块,直接通过js/前缀调用即可:

(ns k6-test.core)

(defn -main []
  (js/http.get "https://test-api.k6.io")
  (js/sleep 1)
  (js/check (js/http.get "https://test-api.k6.io")
            (clj->js {:status-200 #(= (.-status %) 200)})))

方案3:切换到CommonJS编译目标

k6运行时完全支持CommonJS规范,将shadow-cljs的编译目标改为:commonjs,即可正常使用静态引入:
修改shadow-cljs.edn:

{:builds
 {:k6-test
  {:target :commonjs
   :output-dir "dist"
   :modules {:main {:entries [k6-test.core]}}}}}

引入并使用k6依赖:

(ns k6-test.core
  (:require ["k6" :as k6]
            ["k6/http" :as http]))

(defn -main []
  (http/get "https://test-api.k6.io")
  (k6/sleep 1))

补充说明

动态import()语法无法在k6运行时中使用,这是k6基于Go V8的运行时的固有特性,没有办法让import在该环境中被定义,因此只能通过上述静态处理方案解决依赖问题。

内容的提问来源于stack exchange,提问作者Pavel Gurkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:27:28