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

Playwright结合worker_threads测试时遇模块导入错误求助

解决Worker Threads中"Cannot use import statement outside a module"错误

针对你遇到的问题,核心原因是Worker线程加载的TypeScript文件未被正确编译或识别,以下是具体排查和解决步骤:

1. 加载编译后的JS文件而非TS源文件

Node.js原生无法直接解析TypeScript,Worker线程不会自动继承主进程的ts-node编译环境。你当前传入Worker的是TS文件路径./src/adapters/playwright.ts,需要改为加载编译后的JS文件:

  • 确保tsconfig.json中配置了outDir(比如"outDir": "./dist"),执行tsc编译项目
  • 将Worker的文件路径改为编译后的路径,比如./dist/adapters/playwright.js

2. 让Worker直接识别TS文件(无需预编译)

如果不想每次修改都重新编译,可以在创建Worker时指定execArgv参数,强制Worker用ts-node处理TS文件:

import { Worker } from "worker_threads";

const create_worker = (file: string, tasksData: {}) =>
  new Promise((resolve, reject) => {
    const worker = new Worker(file, {
      workerData: tasksData,
      // 添加这一行,让Worker使用ts-node解析TS文件
      execArgv: ["--require", "ts-node/register"]
    });

    worker.on("message", (data) => {
      resolve(data);
    });
    worker.on("error", (msg) => {
      reject(`An error occurred: ${msg}`);
    });
  });

export default create_worker;

注意:确保项目已安装ts-node和typescript依赖,且版本兼容。

3. 检查配置文件的一致性

  • tsconfig.json:确认compilerOptions.module为CommonJS,同时target需设置为ES6或更高版本(worker_threads需要ES6+特性支持);确保include数组包含Worker相关的TS文件
  • package.json:如果设置了"type": "module",会覆盖tsconfig的CommonJS配置,导致Node.js将文件视为ES模块,此时需移除该字段或改为"type": "commonjs"

4. 修复测试代码的数组越界问题

你的测试循环执行了5次,但chunkify_array(search_grid, 4)只生成4块数据,当i=4时chunks![i]会是undefined,建议修改循环条件:

for (let i = 0; i < chunks.length; i++) {
  const worker = await create_worker(
    "./dist/adapters/playwright.js", // 或对应TS路径(如果用方法2)
    {
      search_grid: chunks[i],
    }
  );
  workerPromises.push(worker);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:55:23