k6无法从其他文件导入函数:moduleSpecifier找不到本地文件
导入错误原因及解决方法
核心原因分析
1. k6不兼容Node.js专属依赖
@google-cloud/secret-manager是Node.js环境专属的第三方包,而k6的运行环境基于Go的V8引擎,完全不支持Node.js核心API(如fs、net)及这类Node专属包。这不仅会引发导入路径解析失败,即便路径正确,后续运行也会直接报错。
2. 导入路径未指定文件扩展名
k6解析ES模块导入时,不会自动补全.ts或.js扩展名。你当前的导入语句import { getCloudflareToken } from '../GoogleCloud';缺少.ts后缀,导致k6无法定位目标文件。
3. TypeScript配置缺失
k6运行TS文件需要配套的tsconfig.json且需符合k6的TS规范。当前项目无相关配置,可能导致k6无法正确解析TS文件的模块路径。
4. 脚本语法错误(额外问题)
原signup.ts中const email = test@email.com;缺少字符串引号,属于语法错误,会引发后续运行异常。
分步解决方法
第一步:修复导入路径
修改tests/signup.ts中的导入语句,添加.ts扩展名:
import { getCloudflareToken } from '../GoogleCloud.ts';
第二步:替换Node.js专属依赖的使用方式
由于k6无法运行@google-cloud/secret-manager,需换一种方式获取Cloudflare Token:
方案1:环境变量传入(推荐)
- 本地或CI环境设置环境变量:
# Linux/macOS export CF_TOKEN="你的Cloudflare Token" # Windows PowerShell $env:CF_TOKEN="你的Cloudflare Token" - 脚本中读取环境变量:
export default function () { const cf_token = __ENV.CF_TOKEN; // 后续业务逻辑 }
- 本地或CI环境设置环境变量:
方案2:k6自定义扩展(复杂场景)
若必须在运行时从Secret Manager获取Token,可开发k6的Go扩展集成Google Secret Manager SDK,但需具备Go语言开发能力,适合团队复杂场景。
第三步:添加k6兼容的tsconfig.json
在项目根目录创建tsconfig.json:
{ "compilerOptions": { "target": "ES2019", "module": "ESNext", "moduleResolution": "node", "lib": ["ES2019"], "allowJs": true, "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "types": ["k6"] }, "include": ["tests/**/*", "*.ts"] }
第四步:修复脚本语法错误并验证运行
修改后的tests/signup.ts示例:
import http from 'k6/http'; import { sleep, check } from 'k6'; export default function () { const email = 'test@email.com'; // 补全字符串引号 const cf_token = __ENV.CF_TOKEN; // 示例请求逻辑 const res = http.get('https://your-target-api.com', { headers: { 'Authorization': `Bearer ${cf_token}` } }); check(res, { 'status is 200': (r) => r.status === 200 }); sleep(1); }
运行脚本:
k6 run tests/signup.ts
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

