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

Docker化NestJS项目报错:无法找到@nestjs/cli模块文件

NestJS Docker化时找不到@nestjs/cli模块的解决办法

问题说明

尝试将NestJS应用Docker化时,遇到模块找不到错误:Error: Cannot find module '/usr/node_modules/@nestjs/cli/bin/nest.js'。已在本地和容器内执行yarn global add @nestjs/cli,但问题依旧。

现有配置文件

Dockerfile代码

# pull official base image
FROM node:19.8.1-alpine as development

WORKDIR /usr/src/app

COPY package*.json ./

RUN yarn global add @nestjs/cli
RUN yarn install --only=development

COPY . .

RUN yarn build

FROM node:12.19.0-alpine3.9 as production

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --only=production

COPY . .

COPY --from=development /usr/src/app/dist ./dist

CMD ["node", "dist/main"]

docker-compose.yml代码

version: '3.8'

services:
    dev:
        container_name: nestjs_api_dev
        image: nestjs-api-dev:1.0.0
        build:
            context: .
            target: development
            dockerfile: ./Dockerfile
            command: yarn start
        ports:
            - 3000:3000
            - 9229:9229
        networks:
            - nesjs-network
        volumes:
            - /usr/src/app/node_modules
        restart: unless-stopped

执行docker-compose up dev时的报错

0.776 $ nest build
0.834 node:internal/modules/cjs/loader:1093
0.834   throw err;
0.834   ^
0.834
0.834 Error: Cannot find module 
'/usr/node_modules/@nestjs/cli/bin/nest.js'
0.834     at Module._resolveFilename 
(node:internal/modules/cjs/loader:1090:15)
0.834     at Module._load (node:internal/modules/cjs/loader:934:27)
0.834     at Function.executeUserEntryPoint [as runMain] 
(node:internal/modules/run_main:83:12)
0.834     at node:internal/main/run_main_module:23:47 {
0.834   code: 'MODULE_NOT_FOUND',
0.834   requireStack: []
0.834 }
0.834
0.834 Node.js v19.8.1
0.854 error Command failed with exit code 1.
0.854 info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

解决办法

问题核心是全局安装的@nestjs/cli未被容器的环境变量识别,或者全局安装方式在容器内存在路径兼容问题,以下是两种可行方案:

方案1:将@nestjs/cli作为项目开发依赖安装(推荐)

  1. 本地执行yarn add --dev @nestjs/cli,更新项目的package.json
  2. 删除Dockerfile中RUN yarn global add @nestjs/cli这一行,开发依赖会通过yarn install --only=development自动安装
  3. 确保package.json的scripts命令使用本地cli,示例:
    "scripts": {
      "start": "nest start",
      "start:dev": "nest start --watch",
      "build": "nest build"
    }
    
    Yarn会自动识别本地安装的cli,无需依赖全局路径。

方案2:配置全局cli的环境变量

如果坚持全局安装,需要在Dockerfile中把yarn全局模块的bin目录加入PATH:
在RUN yarn global add @nestjs/cli之后添加:

# 先确认全局bin路径,Alpine系统通常为该路径,可通过yarn global bin命令验证
ENV PATH="${PATH}:/usr/local/share/.config/yarn/global/node_modules/.bin"

额外优化:开发环境热重载配置

当前docker-compose仅挂载了node_modules,无法实时同步本地代码修改,建议修改volumes部分:

volumes:
  - .:/usr/src/app
  - /usr/src/app/node_modules

同时将command改为开发模式命令,支持热重载:

command: yarn start:dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:17:13