TypeScript转译后启动app.js出现MODULE_NOT_FOUND错误求助
解决TypeScript转译后Cannot find module 'controllers'错误
启动转译后的app.js时出现以下错误:
node:internal/modules/cjs/loader:1050 throw err; ^ Error: Cannot find module 'controllers'
问题核心是TS导入写法转译后,Node运行时无法识别模块路径:
- TS中的导入写法:
import { checkToken, getUserInfo, signIn, signUp } from 'controllers'; - 转译后的CommonJS代码:
const controllers_1 = require("controllers");
你的tsconfig.json配置了baseUrl: "./src"让TS能解析根路径模块,但Node运行时遵循CommonJS规则,不带相对路径的模块会默认去node_modules查找,而非你的源码目录,因此报错。
解决方案
方案1:配置模块别名映射(保留根路径导入)
- 修改
tsconfig.json的compilerOptions,添加paths字段映射模块路径:{ "compilerOptions": { // 原有配置... "baseUrl": "./src", "paths": { "controllers": ["./controllers/index.ts"] // 替换为你的controllers实际入口文件路径 } } } - 让Node运行时识别别名:
- 安装
module-alias包:npm install module-alias --save - 在转译后的入口文件(如
dist/app.js)顶部添加:const moduleAlias = require('module-alias'); moduleAlias.addAlias('controllers', __dirname + '/controllers');
package.json中添加:"_moduleAliases": { "controllers": "./dist/controllers" } - 安装
方案2:改用相对路径导入(最直接)
将TS中的根路径导入改为相对路径,比如当前文件在src/routes目录下,修改为:
import { checkToken, getUserInfo, signIn, signUp } from '../controllers';
转译后Node会根据相对路径正确找到模块文件。
方案3:确认模块入口文件存在
确保src/controllers目录下有index.ts(或其他入口文件),且文件中正确导出了checkToken等方法,转译后dist/controllers目录下生成了对应的JS文件。
内容的提问来源于stack exchange,提问作者Lucas Almeida
相关产品推荐
相关产品推荐

