配置tsconfig自定义路径后tsc编译正常,Node运行却提示找不到模块
问题本质
TypeScript的paths和baseUrl只是给编译器用的配置——帮TS识别你的别名导入,避免编译报错,但Node.js运行时根本不认这些自定义别名。Next.js能直接用是因为框架内部已经做了别名解析的处理,普通Node项目得自己加额外配置才行。
解决办法
方案一:用tsconfig-paths让Node识别别名
这是最适配现有tsconfig的方案:
- 先装依赖:
npm install tsconfig-paths --save-dev
- 运行编译后的代码时,加上
tsconfig-paths/register的钩子:
node -r tsconfig-paths/register dist/你的入口文件.js
嫌每次敲麻烦就写到package.json的scripts里:
{ "scripts": { "start": "node -r tsconfig-paths/register dist/index.js" } }
如果用ts-node直接跑TS代码,也可以这么加:
ts-node -r tsconfig-paths/register app/你的入口文件.ts
方案二:编译时直接把别名转成相对路径
用这个方案的话,编译出来的代码里就都是正常的相对路径了,Node直接跑就行:
- 装需要的包:
npm install ttypescript typescript-transform-paths --save-dev
- 修改tsconfig.json,加个插件配置:
{ "compilerOptions": { // 原来的配置都保留,新增下面的plugins "plugins": [ { "transform": "typescript-transform-paths" } ] } }
- 用
ttsc代替原来的tsc命令编译:
npx ttsc
同样可以写到scripts里:
{ "scripts": { "build": "ttsc" } }
方案三:手动设置NODE_PATH(不推荐)
通过环境变量指定模块查找路径,缺点是不够灵活,跨系统可能有差异:
# Linux/macOS下 NODE_PATH=./app node dist/你的入口文件.js # Windows cmd下 set NODE_PATH=./app && node dist/你的入口文件.js # Windows PowerShell下 $env:NODE_PATH="./app"; node dist/你的入口文件.js
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

