已安装class-transformer,Docker强制构建仍提示缺失,如何解决?
问题:Docker构建后提示class-transformer包缺失(已在项目中安装)
我已在项目中安装了class-transformer包,执行docker compose build --no-cache强制构建后,容器启动仍报错:
[Nest] 48 - 12/01/2022, 7:39:07 AM ERROR [PackageLoader] The "class-transformer" package is missing. Please, make sure to install this library ($ npm install class-transformer) to take advantage of ValidationPipe. hestia-mongodb-arbit
项目的package.json配置如下:
{ "name": "app", "version": "0.0.1", "description": "", "author": "", "private": true, "license": "UNLICENSED", "scripts": { "prebuild": "rimraf dist", "build": "nest build", "format": "prettier --write \"apps/**/*.ts\" \"libs/**/*.ts\"", "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./apps/app/test/jest-e2e.json" }, "dependencies": { "@nestjs/common": "^9.2.1", "@nestjs/config": "^2.2.0", "@nestjs/core": "^9.2.1", "@nestjs/graphql": "^10.1.6", "@nestjs/microservices": "^9.2.1", "@nestjs/mongoose": "^9.2.1", "@nestjs/platform-express": "^9.2.1", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "cookie-parser": "^1.4.6", "graphql": "^16.6.0", "install": "^0.13.0", "joi": "^17.7.0", "mongodb": "^4.12.1", "mongoose": "^6.7.4", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7.5.7" }, "devDependencies": { "@nestjs/cli": "^9.1.5", "@nestjs/schematics": "^9.0.3", "@nestjs/testing": "^9.2.1", "@types/express": "^4.17.14", "@types/jest": "28.1.8", "@types/node": "^16.18.3", "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", "jest": "28.1.3", "prettier": "^2.8.0", "source-map-support": "^0.5.21", "supertest": "^6.3.1", "ts-jest": "28.0.8", "ts-loader": "^9.4.1", "ts-node": "^10.9.1", "tsconfig-paths": "4.1.0", "typescript": "^4.9.3" }, "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": ".", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "./coverage", "testEnvironment": "node", "roots": [ "<rootDir>/apps/", "<rootDir>/libs/" ], "moduleNameMapper": { "^@app/common(|/.*)$": "<rootDir>/libs/common/src/$1" } } }
解决方法
检查Dockerfile的依赖安装逻辑
确保Dockerfile中完整执行了依赖安装步骤,多阶段构建场景下,生产镜像必须包含完整的node_modules生产依赖。示例正确的Dockerfile结构:# 构建阶段 FROM node:16-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 生产阶段 FROM node:16-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/package*.json ./ RUN npm install --only=production CMD ["node", "dist/main"]彻底清理Docker缓存
执行docker compose down -v删除所有关联容器和卷,再执行docker compose build --no-cache重新构建,避免旧缓存残留导致依赖未更新。确认代码中class-transformer的导入正确性
检查项目中使用ValidationPipe或class-transformer工具的代码,确保导入路径正确,比如import { plainToInstance } from 'class-transformer',避免因导入错误导致Nest无法检测到包存在。匹配包管理器命令
如果项目使用pnpm或yarn而非npm,Dockerfile中要对应使用pnpm install或yarn install,否则会导致依赖安装不完整。
内容的提问来源于stack exchange,提问作者DolDurma
相关产品推荐
相关产品推荐

