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

已设置type:module仍无法加载web-worker模块,报错import语句非法

解决web-worker包导入时的ES模块语法错误

错误日志

(node:48786) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/myUser/Documents/workers-test-demo/node_modules/web-worker/node.js:17
import URL from 'url';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at internalCompileFunction (node:internal/vm:77:18)
    at wrapSafe (node:internal/modules/cjs/loader:1288:20)
    at Module._compile (node:internal/modules/cjs/loader:1340:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at cjsLoader (node:internal/modules/esm/translators:356:17)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:305:7)
    at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)

Node.js v20.11.0

我的代码

index.js

import Worker from "web-worker";

new Worker("./hello.js"); // 也尝试过添加 { type: "module" };

项目package.json

{
    "name": "workers-test-demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "type": "module",
    "scripts": {
        "start": "node index.js",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "dependencies": {
        "web-worker": "^1.3.0"
    }
}

web-worker包的exports配置

...
"exports": {
    "types": "./index.d.ts",
    "import": {
      "bun": "./browser.js",
      "browser": "./browser.js",
      "default": "./node.js"
    },
    "module": {
      "bun": "./browser.js",
      "browser": "./browser.js",
      "default": "./node.js"
    },
    "default": {
      "bun": "./cjs/browser.js",
      "browser": "./cjs/browser.js",
      "default": "./cjs/node.js"
    }
  },
...

问题分析与解决

报错核心是web-worker包的node.js文件被Node.js当作CommonJS模块加载,但文件本身使用了ES模块的import语法。虽然项目自身设置了"type": "module",但第三方包的模块类型由其自身的package.json决定——该包根目录的package.json未声明"type": "module",且node.js文件没有.mjs后缀,导致Node.js默认按CommonJS解析,触发语法错误。

可行解决方案

  1. 直接导入CommonJS版本
    修改导入语句,指定包的CommonJS入口文件:

    import Worker from "web-worker/cjs/node.js";
    
  2. 升级包版本
    执行命令更新到最新版本,大概率已修复模块声明问题:

    npm update web-worker
    
  3. 临时修改包配置(仅测试用)
    进入node_modules/web-worker目录,在其package.json中添加"type": "module",让Node.js将该包的.js文件识别为ES模块。注意:重新安装依赖后该修改会失效,不推荐用于生产环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:00:22