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

ts-node运行含TS路径别名的脚本时模块找不到问题求助

问题:ts-node运行脚本时无法识别@~/root-dir别名

项目根目录有root-dir.ts脚本,tsconfig.json中配置了baseUrl和paths别名(如@root/*指向根目录),且已安装tsconfig-paths依赖。但执行pnpx ts-node ./lambda/zip-layers.ts运行脚本时,导入@~/root-dir出现“模块找不到”错误,错误信息如下:

throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base));
CustomError: Cannot find package '@~/root-dir' ...
at packageResolve


解决方案

方案1:修正别名配置+适配ESM加载器

  1. 给@~/*添加对应路径映射,在tsconfig.json的compilerOptions.paths中新增一行:
"paths": {
    "@*": ["./src/*"],
    "@root/*": ["./*"],
    "@~/*": ["./*"], // 新增这行,匹配@~/xxx格式的导入
    "@email/*": ["./email/*"],
    "/opt/nodejs/*": ["./lambda/layer/newsletter-helper/nodejs/*", "./lambda/layer/sdk-wrapper/nodejs/*"]
}
  1. 替换ts-node的CommonJS注册器为ESM加载器,修改tsconfig.json里的ts-node配置:
"ts-node": {
    "esm": true,
    "loader": "tsconfig-paths/esm-loader"
}
  1. 运行时显式指定加载器:
pnpx ts-node --loader tsconfig-paths/esm-loader ./lambda/zip-layers.ts

方案2:改用已配置的@root别名

直接修改zip-layers.ts中的导入语句,用现有的@root别名替代@~:

// 原代码
import { rootDir } from "@~/root-dir";
// 修改后
import { rootDir } from "@root/root-dir";

之后直接执行原命令即可:

pnpx ts-node ./lambda/zip-layers.ts

方案3:指定tsconfig路径(多配置场景适用)

如果需要指定特定的tsconfig文件,运行时添加环境变量:

TS_NODE_PROJECT=./tsconfig.json pnpx ts-node --loader tsconfig-paths/esm-loader ./lambda/zip-layers.ts

注意:此方案需要先按方案1的步骤给@~/*添加路径映射。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:13:13