Docker构建时yarn build报错:nest命令未找到
nest命令未找到的原因与解决办法
问题原因
你在执行yarn install时添加了--production参数,这个参数会让Yarn只安装package.json里dependencies中的包,跳过devDependencies。而nest命令是由@nestjs/cli提供的,这个包一般被放在devDependencies中,所以容器里没有安装它,导致执行yarn build时提示命令找不到。
解决方案
推荐使用多阶段构建,既完成编译构建,又能保证最终生产镜像的轻量化:
# 第一阶段:构建编译产物 FROM node:16.14.2-alpine AS builder WORKDIR /app COPY package.json yarn.lock ./ # 安装所有依赖(包括devDependencies) RUN yarn install --frozen-lockfile COPY . . # 执行构建命令 RUN yarn build # 第二阶段:生产镜像 FROM node:16.14.2-alpine ENV NODE_ENV=production WORKDIR /app COPY package.json yarn.lock ./ # 只安装生产依赖 RUN yarn install --frozen-lockfile --production # 从构建阶段复制编译好的dist目录 COPY --from=builder /app/dist ./dist CMD ["yarn", "start:prod"]
其他可选方案(不推荐)
- 临时去掉
--production参数执行yarn install,完成构建后再手动删除devDependencies,但会导致镜像体积变大。 - 将
@nestjs/cli移到package.json的dependencies中,这样生产依赖会包含它,但没必要在生产环境保留构建工具,会增加镜像冗余。
内容的提问来源于stack exchange,提问作者Kabdik
相关产品推荐
相关产品推荐

