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

TypeScript命令行工具动态导入模块失败求助

解决TypeScript动态导入模块路径解析问题

问题场景

开发TypeScript命令行工具时,代码从指定文件夹动态导入TypeScript模块,执行ts-node src/index.ts或ts-node --esm src/index.ts时,动态导入的contracts/CheckContract.ts尝试导入src/check/Check失败,报错Cannot find module 'src/check/Check',但相同代码在Jest单元测试中运行正常。

原因分析

Jest配置中通过modulePaths: ["<rootDir>"]将项目根目录加入了模块搜索路径,因此能正确解析以src/开头的绝对路径导入。但Node.js本身不识别TypeScript的baseUrl配置,ts-node默认也不会自动将tsconfig.json中的baseUrl映射为Node.js的模块搜索路径,导致运行时无法找到对应模块。

解决方案

方案1:使用tsconfig-paths辅助解析(推荐)

  1. 安装依赖包:
npm install --save-dev tsconfig-paths
  1. 运行命令时添加tsconfig-paths/register钩子:
ts-node -r tsconfig-paths/register src/index.ts
  1. (可选)在package.json中添加脚本简化操作:
{
  "scripts": {
    "start": "ts-node -r tsconfig-paths/register src/index.ts"
  }
}

之后直接运行npm start即可。

方案2:在tsconfig中配置ts-node自动加载钩子

修改tsconfig.json,添加ts-node配置项,让它自动启用tsconfig-paths:

{
  "compilerOptions": {
    // 原有配置保持不变
  },
  "ts-node": {
    "require": ["tsconfig-paths/register"]
  },
  "include": [/* 原有配置 */],
  "exclude": [/* 原有配置 */]
}

配置完成后,直接运行ts-node src/index.ts即可正常解析路径。

方案3:临时使用NODE_PATH(不推荐)

通过设置NODE_PATH环境变量将项目根目录加入模块搜索路径:

NODE_PATH=. ts-node src/index.ts

注意:NODE_PATH在Node.js中已被标记为废弃,仅适合临时测试,不建议长期使用。

验证

执行对应命令后,动态导入的模块应能正确解析src/check/Check路径,不再出现MODULE_NOT_FOUND错误。

内容的提问来源于stack exchange,提问作者Árpád Magosányi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:35:06