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

NX项目手动构建后运行报错:无法找到@my-project/server模块

解决NX项目手动运行dist/main.js时模块找不到的问题

问题根源

  • nx start会自动处理tsconfig.json里的paths别名,把@my-project/server这类别名转成实际文件路径,所以能正常启动
  • 直接跑node dist/main.js时,Node.js不认TS的paths配置,编译后的代码里还留着这些别名,自然找不到对应的模块

解决办法

办法1:用NX官方的运行命令(最省心)

NX本身就有运行构建产物的命令,直接执行:

nx serve my-project --prod

或者针对已构建好的产物,也可以用:

nx run my-project:serve:production

这个命令会自动处理别名解析,和nx start的运行逻辑一致,不用自己折腾。

办法2:手动用工具处理别名(适合自定义部署)

  1. 先装依赖,用tsconfig-paths来解析别名:
npm install tsconfig-paths --save-dev
  1. 在项目根目录新建start-dist.js文件,内容如下:
const { resolve } = require('path');
const { register } = require('tsconfig-paths');

// 加载项目根目录的tsconfig配置
const tsConfigPath = resolve(__dirname, 'tsconfig.json');
register({
  baseUrl: './dist', // 指向构建产物的根目录
  paths: {
    '@my-project/server': ['./server/src'],
    '@my-project/config': ['./config/src']
  }
});

// 启动构建后的main.js
require('./dist/my-project/main.js');
  1. 运行这个脚本就行:
node start-dist.js

办法3:构建时直接替换别名(一劳永逸)

修改项目的project.json里的build配置,让编译时就把别名换成实际路径:

  1. 先装@nrwl/js(如果没装的话):
npm install @nrwl/js --save-dev
  1. 打开project.json,找到targets.build.options,添加transformer配置:
"assets": [
  // 保留你原来的assets配置
],
"transformers": [
  "@nrwl/js/plugins/tsconfig-paths-transformer"
]

重新跑nx build,这次编译后的代码里的别名会被替换成相对路径,之后直接node dist/main.js就能正常运行了。

验证

执行对应办法的命令后,看是否还会出现Cannot find module '@my-project/server'的错误,服务能正常启动就算解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:52:26