已安装ts-node仍报错:WebdriverIO/Electron项目模块找不到
配置Electron+WebdriverIO时出现ERR_MODULE_NOT_FOUND错误
运行自动化测试时遇到以下模块找不到错误:
node:internal/errors:465 ErrorCaptureStackTrace(err); ^ Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\user\automation\product\src\product.client\ node_modules\ts-node\esm\transpile-only' imported from C:\Users\user\automation\product\src\product.client\ at new NodeError (node:internal/errors:372:5) at finalizeResolution (node:internal/modules/esm/resolve:437:11) at moduleResolve (node:internal/modules/esm/resolve:1009:10) at defaultResolve (node:internal/modules/esm/resolve:1218:11) at ESMLoader.resolve (node:internal/modules/esm/loader:580:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:294:18) at ESMLoader.import (node:internal/modules/esm/loader:380:22) at initializeLoader (node:internal/process/esm_loader:74:49) at loadESM (node:internal/process/esm_loader:87:11) at runMainESM (node:internal/modules/run_main:51:21) { code: 'ERR_MODULE_NOT_FOUND' }
已确认ts-node已安装,项目package.json配置如下:
{ "devDependencies": { "@types/chalk": "^2.2.0", "@types/chart.js": "^2.9.34", "@types/command-line-args": "^5.0.0", "@types/execa": "^2.0.0", "@types/node": "^14.6.0", "@types/request": "^2.48.7", "@typescript-eslint/eslint-plugin": "^2.18.0", "@typescript-eslint/parser": "^2.18.0", "@wdio/cli": "^8.3.3", "@wdio/devtools-service": "^7.16.14", "chalk": "^4.1.0", "command-line-args": "^5.1.1", "cross-env": "^7.0.2", "electron-chromedriver": "^13.0.0", "electron-packager": "^15.2.0", "electron-wix-msi": "^3.2.0", "eslint": "^6.8.0", "eslint-plugin-import": "^2.20.0", "execa": "^4.0.3", "rimraf": "^3.0.2", "ts-node": "^8.10.2", "typescript": "^4.9.5", "wdio-electron-service": "^3.5.1", "webdriverio": "^7.7.4", "yarn-run-all": "^3.1.1" }, "dependencies": { "chart.js": "2.9.4", "electron": "^23.0.0", "react-number-format": "^4.8.0" } }
错误原因分析
- ts-node版本过低:你安装的
ts-node@8.10.2是2020年的旧版本,当时ESM支持还不完善,transpile-only的ESM入口路径可能不存在或与当前Node.js的ESM加载逻辑不兼容。 - WebdriverIO版本冲突:项目混合使用了v8版的
@wdio/cli和v7版的webdriverio,跨版本搭配会导致加载逻辑混乱。 - ESM配置缺失:如果项目启用了ESM模式(
package.json含"type": "module"),ts-node需要额外配置才能正确处理ESM模块。 - Node.js版本不匹配:
@types/node@14.6.0对应Node.js 14,但Electron v23基于Node.js 18,版本差异可能引发兼容性问题。
解决步骤
1. 升级ts-node到兼容版本
卸载旧版本,安装最新稳定版:
npm uninstall ts-node npm install -D ts-node@latest
或使用yarn:
yarn remove ts-node yarn add -D ts-node@latest
2. 统一WebdriverIO版本
WebdriverIO的CLI与核心库版本必须一致,建议升级到v8稳定版:
npm uninstall @wdio/cli webdriverio @wdio/devtools-service wdio-electron-service npm install -D @wdio/cli@latest webdriverio@latest @wdio/devtools-service@latest wdio-electron-service@latest
若需保留v7版本,执行:
npm uninstall @wdio/cli npm install -D @wdio/cli@7.7.4
3. 配置ESM支持(若项目为ESM模式)
在tsconfig.json中添加ts-node的ESM配置:
{ "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" }, "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true } }
同时确保WDIO配置文件(如wdio.conf.ts)使用ESM导出规范,用export default替代module.exports。
4. 清理依赖缓存并重装
缓存异常可能导致依赖加载问题,执行以下命令:
# npm环境 npm cache clean --force rm -rf node_modules package-lock.json npm install # yarn环境 yarn cache clean rm -rf node_modules yarn.lock yarn install
5. 升级Node.js版本
将Node.js升级到16+版本(Electron v23兼容16+),匹配Electron的底层Node.js版本,避免兼容性问题。
内容的提问来源于stack exchange,提问作者kev
相关产品推荐
相关产品推荐

