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

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:配置模块别名映射(保留根路径导入)

  1. 修改tsconfig.json的compilerOptions,添加paths字段映射模块路径:
    {
        "compilerOptions": {
            // 原有配置...
            "baseUrl": "./src",
            "paths": {
                "controllers": ["./controllers/index.ts"] // 替换为你的controllers实际入口文件路径
            }
        }
    }
    
  2. 让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:35:07