使用Bun运行脚本遇TS5109错误:moduleResolution配置异常
问题:运行find-cypress-specs脚本触发TypeScript编译错误
场景
执行package.json中的以下脚本时:
"changed-specs": "find-cypress-specs --branch main --parent"
出现TypeScript编译错误,报错信息如下:
/Users/george/Documents/core-cypress/node_modules/ts-node/src/index.ts:859 return new TSError(diagnosticText, diagnosticCodes, diagnostics); ^ TSError: ⨯ Unable to compile TypeScript: error TS5109: Option 'moduleResolution' must be set to 'NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'. at createTSError (/Users/george/Documents/core-cypress/node_modules/ts-node/src/index.ts:859:12) at reportTSError (/Users/george/Documents/core-cypress/node_modules/ts-node/src/index.ts:863:19) at /Users/george/Documents/core-cypress/node_modules/ts-node/src/index.ts:1379:34 at Object.compile (/Users/georg/Documents/core-cypress/node_modules/ts-node/src/index.ts:1451:13) at Module.m._compile (/Users/george/Documents/core-cypress/node_modules/ts-node/src/index.ts:1617:30) at Module._extensions..js (node:internal/modules/cjs/loader:1295:10) at Object.require.extensions.<computed> [as .ts] (/Users/george/Documents/core-cypress/node_modules/ts-node/src/index.ts:1621:12) at Module.load (node:internal/modules/cjs/loader:1091:32) at Function.Module._load (node:internal/modules/cjs/loader:938:12) at Module.require (node:internal/modules/cjs/loader:1115:19) { diagnosticCodes: [ 5109 ] }
环境与尝试
- 目前使用Bun作为包管理器,其他脚本运行正常
- 近期未修改TypeScript配置,仅更换了包管理器
- 怀疑部分库与Bun不兼容,尝试将
moduleResolution设为NodeNext但问题依旧
当前TypeScript配置(tsconfig.json):
{ "compilerOptions": { "target": "es5", "lib": ["es5", "dom"], "types": ["cypress", "node", "@cypress/grep"], "resolveJsonModule": true }, "include": ["**/*.ts"] }
解决方案
1. 统一module与moduleResolution配置
错误提示说明module被设为NodeNext但moduleResolution不匹配,大概率是Bun或find-cypress-specs内部触发了不同的TS规则。直接在tsconfig中明确统一配置:
如果要兼容CommonJS:
{ "compilerOptions": { "target": "es5", "lib": ["es5", "dom"], "types": ["cypress", "node", "@cypress/grep"], "resolveJsonModule": true, "module": "CommonJS", "moduleResolution": "Node" }, "include": ["**/*.ts"] }
如果要使用ES模块规范:
{ "compilerOptions": { "target": "es5", "lib": ["es5", "dom"], "types": ["cypress", "node", "@cypress/grep"], "resolveJsonModule": true, "module": "NodeNext", "moduleResolution": "NodeNext" }, "include": ["**/*.ts"] }
2. 为ts-node单独指定配置
如果全局tsconfig需要保留现有设置,可以给这个脚本单独指定配置:
- 创建
tsconfig.scripts.json:
{ "extends": "./tsconfig.json", "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext" } }
- 修改脚本:
"changed-specs": "ts-node --project tsconfig.scripts.json find-cypress-specs --branch main --parent"
3. 绕过ts-node直接运行JS入口
如果find-cypress-specs有编译好的JS版本,直接调用其dist文件:
"changed-specs": "node ./node_modules/find-cypress-specs/dist/index.js --branch main --parent"
4. 验证Bun兼容性
- 重新安装依赖:
bun install
- 临时切换回npm/yarn验证是否是Bun的兼容问题:
npm install npm run changed-specs
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

