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

