Nodejs+Typescript+Router+ts-node-esm模块未找到问题求助
Node.js/React+TypeScript 模块导入报错:Cannot find module
我正在搭建首个Node.js/React+TypeScript应用,尝试从/src/routes/tickerRouter导入路由到server/index.ts时触发报错:
/.../node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:366 throw new ERR_MODULE_NOT_FOUND( ^ CustomError: Cannot find module '/.../react-node-app/server/src/routes/tickerRouter' imported from /.../react-node-app/server/index.ts
已尝试的操作:
- 所有文件均使用
.ts扩展名而非.js - 在
index.ts的导入语句中添加.js,实际文件保持.ts扩展名 - 使用
ts-node-esm server/index.ts启动项目 - 在package.json中添加
"type": "module" - 使用
export default替代module.exports = - 查阅大量资料仍未解决,寻求帮助。
可能的解决方向
1. 修正导入路径的正确性
从报错路径可以看出,系统在/react-node-app/server/src/routes/下寻找模块,但你的项目结构大概率是根目录下同时存在src和server文件夹。此时需根据相对路径调整导入语句:
如果index.ts在server文件夹,tickerRouter.ts在根目录的src/routes下,正确导入应为:
import tickerRouter from '../src/routes/tickerRouter.js';
2. 检查tsconfig.json核心配置
确保tsconfig.json的compilerOptions适配ESM与TypeScript的组合:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true, "skipLibCheck": true, "baseUrl": "./", "include": ["src/**/*", "server/**/*"] } }
如果使用路径别名(如@/routes/xxx),需额外添加paths配置,并保证导入时带.js后缀。
3. 调整ts-node启动参数
使用ts-node-esm时,显式指定tsconfig路径避免配置加载异常:
ts-node-esm --project tsconfig.json server/index.ts
4. 尝试先编译再运行
若ts-node的ESM兼容存在问题,可先编译TypeScript代码再执行:
tsc # 执行编译,需确保tsconfig中outDir配置正确 node dist/server/index.js # 替换为你的编译输出目录路径
内容的提问来源于stack exchange,提问作者gabs
相关产品推荐
相关产品推荐

