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 사용 중입니다.