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

Node Express项目moduleResolution设为node,编译正常运行却找不到'myTypes'模块?

问题原因及解决办法

嗨,这个问题我之前也碰到过,核心原因其实是TypeScript的paths配置只在编译阶段生效,Node.js运行时完全不识别这个路径映射规则。

具体为啥会这样?

  • 你在tsconfig.json里写的"paths": { "*": [ "node_modules/*", "src/types/*" ] },是给TypeScript编译器看的——它知道要去src/types目录找myTypes,所以tsc能正常编译没报错。
  • 但等你运行编译好的app.js时,Node.js是按自己的模块规则找文件的:它只会去node_modules里找,或者认相对/绝对路径,完全不知道你在tsconfig里定义的映射规则,自然就找不到myTypes.js了。

给你几个实用的解决思路:

1. 改用相对路径(最简单直接的方案)

直接把app.ts里的导入改成相对路径就行:

import { HttpError } from "./types/myTypes";

这样编译后的app.js里的导入路径也会是相对路径,Node.js就能精准找到对应的文件了。

2. 用tsconfig-paths让Node.js认tsconfig的路径

这个工具能让Node.js在运行时读取tsconfig.json的paths配置,按照你定义的规则解析模块:

  • 先装依赖:
npm install tsconfig-paths --save-dev
  • 如果是用ts-node直接运行TS文件,启动命令改成这样:
ts-node -r tsconfig-paths/register src/app.ts

如果是运行编译后的JS文件,就用:

node -r tsconfig-paths/register outDir/app.js

注意哦,这个方案需要你在tsconfig.json里把baseUrl配置对,一般设成./或者./src就没问题。

3. 用package.json的exports字段(适合把类型模块当内部包用)

如果你的src/types是一组独立的模块,可以在项目根目录的package.json里加个exports字段,指定myTypes的入口:

{
  "exports": {
    "myTypes": "./src/types/myTypes.ts"
  }
}

这样不管是TypeScript编译还是Node.js运行,都能正确解析import { HttpError } from "myTypes"了,不过这个要求Node.js版本在12.7.0以上才行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:12:13