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

NestJS工作区构建后无法找到编译源文件问题求助

问题描述

我将NestJS项目目录重命名为server,并把docker-compose.yml、tsconfig.json和根目录的package.json移到了该文件夹外部。根目录的package.json中配置了工作区,用于访问不同命名空间。

执行npm run start启动Docker后,根目录(server文件夹外)生成了dist文件夹,结构如下:
dist文件夹结构

但server内的项目无法运行,抛出错误:

Error: Cannot find module '/opt/dist/main'

Docker启动命令:

npm run start

根目录package.json内容

{
  "name": "auction",
  …
  "workspaces": [
    "auction-client",
    "auction-server",
    "shared"
  ],
  "scripts": {
    …
    "docker:compose": "docker compose up",
    "server:dev": "wait-on tcp:6379 && npm run start:dev --workspace=auction-server",
    "start": "concurrently 'npm:docker:compose' 'npm:server:dev'",
    …
  },
  "devDependencies": {
    "concurrently": "^8.2.2",
    "prettier": "^2.8.8",
    "wait-on": "^6.0.1"
  },
  "dependencies": {
    "source-map-support": "^0.5.21"
  }
}

docker-compose.yml内容

services:
  app:
    container_name: ${APP_CONTAINER_NAME}-app
    build:
      context: ./docker
      dockerfile: ./Dockerfile
    image: auction-project:alpine-10.0.5
    #restart: always
    env_file:
      - ./.env
    networks:
      - default
    ports:
      - '80:3000'
    volumes:
      - .:/opt
      - ./docker/storage:/home/storage:rw
    working_dir: /opt
    command: npm run start:dev
    depends_on:
      - database
  database:
    …
  phpmyadmin:
    ...
  redis:
    …
networks:
  …

docker文件夹内Dockerfile内容

FROM node:19.9.0-alpine
RUN corepack disable yarn
RUN npm i -g yarn
RUN npm i -g @nestjs/cli@10.0.5

WORKDIR /opt

根目录tsconfig.json内容(与docker-compose.yml同级)

{
    "compilerOptions": {
        "module": "commonjs",
        "declaration": true,
        "removeComments": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "allowSyntheticDefaultImports": true,
        "target": "ES2023",
        "sourceMap": true,
        "outDir": "./dist",
        "baseUrl": "./",
        "incremental": true,
        "skipLibCheck": true,
        "strictNullChecks": false,
        "noImplicitAny": false,
        "strictBindCallApply": false,
        "forceConsistentCasingInFileNames": false,
        "noFallthroughCasesInSwitch": false
    }
}

server文件夹内package.json内容

{
  "name": "auction-server",
  "version": "0.0.1",
  "description": "<p></p>",
  "author": "",
  "private": true,
  "license": "COMMERCIAL",
  ...
  "main": ".eslintrc.js",
  "directories": {
  },
  "keywords": []
}

server文件夹内tsconfig.json内容

{
    "compilerOptions": {
        "types": ["node"],
        "module": "commonjs",
        "declaration": true,
        "removeComments": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "allowSyntheticDefaultImports": true,
        "target": "ES2023",
        "sourceMap": true,
        "outDir": "./dist",
        "baseUrl": "./",
        "incremental": true,
        "skipLibCheck": true,
        "strictNullChecks": false,
        "noImplicitAny": false,
        "strictBindCallApply": false,
        "forceConsistentCasingInFileNames": false,
        "noFallthroughCasesInSwitch": false,
    }
}

解决方案

1. 修正server目录package.json的main字段

当前server目录的package.json中main字段错误指向.eslintrc.js,需改为编译后的入口文件路径:

{
  // ...其他配置项
  "main": "dist/main.js",
  // ...其他配置项
}

2. 调整server目录tsconfig.json的输出路径

server目录的tsconfig目前将产物输出到自身./dist,与根目录tsconfig的输出路径冲突。修改为输出到根目录dist下的对应子目录,符合npm工作区结构:

{
  "compilerOptions": {
    // ...其他编译配置
    "outDir": "../dist/auction-server",
    // ...其他编译配置
  }
}

3. 修正根目录工作区配置与启动脚本

根目录package.json的工作区配置仍指向旧目录名auction-server,需改为实际目录名server,同时更新启动脚本:

{
  "workspaces": [
    "auction-client",
    "server", // 替换为实际目录名
    "shared"
  ],
  "scripts": {
    // ...其他脚本
    "server:dev": "wait-on tcp:6379 && npm run start:dev --workspace=server",
    // ...其他脚本
  }
}

4. 明确Docker容器内的启动命令

修改docker-compose.yml的command字段,直接指定工作区启动命令,避免路径混淆:

services:
  app:
    # ...其他配置
    command: npm run start:dev --workspace=server
    # ...其他配置

5. 清理旧编译产物

删除根目录和server目录下的dist文件夹,避免缓存干扰,重新执行启动命令。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:04:59