웹사이트 검색

node.js - NestJS/Swagger 오류 TS2307: 모듈 '@nestjs/swagger'을 찾을 수 없습니다


저는 제 NestJS 앱에 Swagger를 추가하려고 하고 있지만, 모듈을 찾을 수 없다는 오류가 계속 발생하고 있습니다. package.json 파일에 추가하기 위해 npm install --save @nestjs/swagger swagger-ui-express를 사용했습니다. 또한 저는 docker와 docker-compose를 사용하고 있다는 점을 참고해 주세요.

main.ts 파일:

import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const whitelistOrigins = process.env.ALLOWED_CORS_ORIGIN;
  app.enableCors({
    origin: (origin, callback) => {
      if (whitelistOrigins.indexOf(origin) !== -1) {
        callback(null, true);
      } else {
        callback(null, false);
      }
    },
    optionsSuccessStatus: 200,
  });


  const options = new DocumentBuilder()
    .setTitle('App')
    .setDescription('The App API;')
    .setVersion('1.0')
    .addTag('app')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api', app, document);

  await app.listen(process.env.PORT);
}
bootstrap();

package.json 파일:

"dependencies": {
    "@nestjs/common": "^6.3.1",
    "@nestjs/core": "^6.3.1",
    "@nestjs/jwt": "^6.1.1",
    "@nestjs/mongoose": "^6.1.2",
    "@nestjs/passport": "^6.1.0",
    "@nestjs/platform-express": "^6.3.2",
    "@nestjs/platform-socket.io": "^6.3.2",
    "@nestjs/swagger": "^3.1.0",
    "@nestjs/websockets": "^6.3.1",
    "bcrypt": "^3.0.6",
    "cache-manager": "^2.9.1",
    "cache-manager-redis-store": "^1.5.0",
    "dotenv": "^8.0.0",
    "google-auth-library": "^4.2.2",
    "helmet": "^3.21.1",
    "joi": "^14.3.1",
    "lodash": "^4.17.11",
    "moment": "^2.24.0",
    "mongoose": "^5.6.0",
    "nest-access-control": "^2.0.1",
    "nest-schedule": "^0.6.0",
    "passport": "^0.4.0",
    "passport-http-bearer": "^1.0.1",
    "passport-jwt": "^4.0.0",
    "reflect-metadata": "^0.1.13",
    "rimraf": "^2.6.3",
    "rxjs": "^6.5.2",
    "socket.io-redis": "^5.2.0",
    "swagger-ui-express": "^4.1.2",
    "typescript": "^3.5.2"
  },
  "devDependencies": {
    "@nestjs/testing": "^6.3.1",
    "@types/express": "^4.17.0",
    "@types/jest": "^24.0.15",
    "@types/node": "^12.0.8",
    "@types/supertest": "^2.0.7",
    "jest": "^24.8.0",
    "nodemon": "^1.19.1",
    "prettier": "^1.18.2",
    "supertest": "^4.0.2",
    "ts-jest": "^24.0.2",
    "ts-loader": "^6.0.3",
    "ts-node": "^8.3.0",
    "tsconfig-paths": "^3.8.0",
    "tslint": "5.17.0"
  },

tsconfig.json 파일:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "moduleResolution": "node"
  },
}

저는 npm run start:dev와 npm run start:prod를 사용하여 앱을 실행할 때 다음과 같은 오류가 계속 발생하고 있습니다:

/home/node/app/node_modules/ts-node/src/index.ts:293
     return new TSError(diagnosticText, diagnosticCodes)
            ^
 TSError: ⨯ Unable to compile TypeScript:
 src/main.ts(4,48): error TS2307: Cannot find module '@nestjs/swagger'.

     at createTSError (/home/node/app/node_modules/ts-node/src/index.ts:293:12)
     at reportTSError (/home/node/app/node_modules/ts-node/src/index.ts:297:19)
     at getOutput (/home/node/app/node_modules/ts-node/src/index.ts:399:34)
     at Object.compile (/home/node/app/node_modules/ts-node/src/index.ts:457:32)
     at Module.m._compile (/home/node/app/node_modules/ts-node/src/index.ts:530:43)
     at Module._extensions..js (internal/modules/cjs/loader.js:789:10)
     at Object.require.extensions.(anonymous function) [as .ts] (/home/node/app/node_modules/ts-node/src/index.ts:533:12)
     at Module.load (internal/modules/cjs/loader.js:653:32)
     at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
     at Function.Module._load (internal/modules/cjs/loader.js:585:3)
 [nodemon] app crashed - waiting for file changes before starting...

docker-compose.yml 파일:

version: "2"
services:
  node:
    build: 
      context: .
      dockerfile: ./docker/node/Dockerfile
    user: "node"
    working_dir: /home/node/app
    environment:
      - NODE_ENV=development
    volumes:
      - ./:/home/node/app
      - /home/node/app/node_modules/
    expose:
      - "8081"
    command: "npm run start:dev"
    ports:
      - "8000:8000"
    depends_on:
      - mongo
      - redis
  mongo:
    image: mongo
    ports:
      - "27018:27017"
    volumes:
      - data-volume:/data/db
  redis:
    image: redis
    ports:
      - "6379:6379"
  mongoclient:
    image: mongoclient/mongoclient:2.2.0
    depends_on:
      - mongo
    ports:
      - 3300:3000
volumes:
  data-volume:

/docker/node/Dockerfile:

FROM node:10

WORKDIR /home/node/app
COPY ./package.json ./

RUN npm install nodemon -g
RUN npm install

이 오류는 nodemon을 사용하는 동안 발생합니다.

답변 #1

저는 @nestjs/swagger를 성공적으로 설치했지만 다음 오류가 발생합니다: "error TS2307: 모듈 '@nestjs/swagger' 또는 해당하는 타입 선언을 찾을 수 없습니다."

저는 package.json에 "@nestjs/swagger": "^5.2.1"를 추가하고 yarn을 실행했습니다. 제 문제를 해결했습니다.

답변 #2

때때로 도커 빌드가 이상하게 동작하여 제대로 빌드되지 않을 때가 있습니다. 메인 이미지를 다시 빌드하고 다시 시도하세요. 저는 NestJS 프레임워크(expressJS)를 사용 중이며 비슷한 문제를 겪었지만 이 방법으로 해결되었습니다. 다른 모듈들도 동일한 선언 문제를 겪었으며 이 방법으로 해결되었습니다. Swagger ^6.0.5 사용 중입니다.