인프런 커뮤니티 질문&답변

서기문님의 프로필 이미지

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

typeorm seeding, migration

yarn run db:create 시에 발생하는 데코레이터 오류

해결된 질문

24.10.05 23:52 작성

·

98

·

수정됨

0

제목처럼 명령어 실행시 아래와 같은 오류가 발생했습니다.

Decorating class property failed. Please ensure that transform-class-properties is enabled and r uns after the decorators transform.

이 오류는 타입스크립트 데코레이터와 클래스 필드초기화 문제로 보입니다. 엔티티를 처리하는 과정에서 데코레이터가 클래스 필드와 충돌을 일으키는 것으로 보입니다. 갑자기 생긴 오류에 tsconfig.ts 파일도 수정해보고 엔티티를 다시 점검해봐도 오류가 해결이 안되서 질문드립니다.

오류가 발생하는 부분입니다.

at _initializerWarningHelper (src/entities/DMs.ts:12:964)
at DMs.<instance_members_initializer> (src/entities/DMs.ts:58:286)
at new DMs (src/entities/DMs.ts:58:270)
at EntityMetadata.create (node_modules/src/metadata/EntityMetadata.ts:568:23)
at EntityMetadataValidator.validate (node_modules/src/metadata-builder/EntityMetadataValidator.ts:211:47)
at node_modules/src/metadata-builder/EntityMetadataValidator.ts:43:18 
at Array.forEach (<anonymous>)
at EntityMetadataValidator.validateMany (node_modules/src/metadata-builder/EntityMetadataValidator.ts:42:25)
at DataSource.buildMetadatas (node_modules/src/data-source/DataSource.ts:730:33)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
error Command failed with exit code 1.

DMs 엔티티의 문제인가 싶어서 제로초님의 코드를 다시 작성해보고 살펴보아도 문제가 해결되지 않습니다.

추가로 yarn seed명령어도 안됩니다,,,

 

 

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 10. 06. 11:51

네네 이거 라이브러리 버전 문제라서 제 깃헙 버전과 일치하지 않으면 문제가 생깁니다.

https://www.inflearn.com/community/questions/1397144/npm-run-db-create-%EC%8B%9C%EC%97%90-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-decorating-%EC%98%A4%EB%A5%98

서기문님의 프로필 이미지
서기문
질문자

2024. 10. 06. 14:41

{
    "name": "nest",
    "version": "0.0.1",
    "description": "",
    "author": "",
    "private": true,
    "license": "UNLICENSED",
    "scripts": {
        "build": "nest build",
        "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
        "start": "nest start",
        "start:dev-backup": "nest start --watch",
        "start:dev": "nest build --webpack --webpackPath webpack-hmr.config.js --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 ./test/jest-e2e.json",
        "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js",
        "db:create": "ts-node ./node_modules/typeorm-extension/bin/cli.cjs db:create -d ./dataSource.ts",
        "db:drop": "ts-node ./node_modules/typeorm-extension/bin/cli.cjs db:drop -d ./dataSource.ts",
        "seed": "ts-node ./node_modules/typeorm-extension/bin/cli.cjs seed:run -d ./dist/dataSource.ts",
        "schema:drop": "ts-node ./node_modules/typeorm/cli.js schema:drop",
        "schema:sync": "ts-node ./node_modules/typeorm/cli.js schema:sync",
        "db:migrate": "npm run typeorm migration:run -- -d ./dataSource.ts",
        "db:migrate:revert": "npm run typeorm migration:revert -- -d ./dataSource.ts",
        "db:create-migration": "npm run typeorm migration:create -- ./src/migrations/",
        "db:generate-migration": "npm run typeorm migration:generate -- ./src/migrations -d ./dataSource.ts"
    },
    "dependencies": {
        "@nestjs/common": "^10.0.0",
        "@nestjs/config": "^3.2.3",
        "@nestjs/core": "^10.0.0",
        "@nestjs/platform-express": "^10.0.0",
        "@nestjs/swagger": "^7.4.2",
        "@nestjs/typeorm": "^9.0.0",
        "dotenv": "^16.4.5",
        "mysql2": "^2.2.5",
        "reflect-metadata": "^0.1.13",
        "rxjs": "^7.8.1",
        "typeorm": "^0.3.0",
        "typeorm-extension": "^2.1.15"
    },
    "devDependencies": {
        "@nestjs/cli": "^10.0.0",
        "@nestjs/schematics": "^10.0.0",
        "@nestjs/testing": "^10.0.0",
        "@types/express": "^4.17.17",
        "@types/jest": "^29.5.2",
        "@types/node": "^20.3.1",
        "@types/supertest": "^2.0.12",
        "@typescript-eslint/eslint-plugin": "^6.0.0",
        "@typescript-eslint/parser": "^6.0.0",
        "eslint": "^8.42.0",
        "eslint-config-prettier": "^9.0.0",
        "eslint-plugin-prettier": "^5.0.0",
        "jest": "^29.5.0",
        "prettier": "^3.0.0",
        "run-script-webpack-plugin": "^0.2.0",
        "source-map-support": "^0.5.21",
        "supertest": "^6.3.3",
        "ts-jest": "^29.1.0",
        "ts-loader": "^9.4.3",
        "ts-node": "^10.9.2",
        "tsconfig-paths": "^4.2.0",
        "typeorm-model-generator": "^0.4.6",
        "typescript": "^4.3.5",
        "webpack": "^5.95.0",
        "webpack-node-externals": "^3.0.0"
    },
    "jest": {
        "moduleFileExtensions": [
            "js",
            "json",
            "ts"
        ],
        "rootDir": "src",
        "testRegex": ".*\\.spec\\.ts$",
        "transform": {
            "^.+\\.(t|j)s$": "ts-jest"
        },
        "collectCoverageFrom": [
            "**/*.(t|j)s"
        ],
        "coverageDirectory": "../coverage",
        "testEnvironment": "node"
    }
}

package.json파일인데 어디가 문제인지 모르겠습니다.
버전을 맞췄는데도 불구하고 오류가 발생합니다.

서기문님의 프로필 이미지
서기문
질문자

2024. 10. 06. 17:07

혹시나 같은 오류로 고생하시는 분들이 계실까봐 올립니다...

우선 라이브러리 버전들이 안맞아서 생기는 오류이고 해결방법은

package.json파일에서

"seed": "node ./node_modules/typeorm-extension seed:run -d ./dist/dataSource.js",

 

위 코드와 같이 작성하시면 문제없이 작동됩니다 :)

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 05. 23:56

안녕하세요, 인프런 AI 인턴입니다. 서기문님,

제공해주신 오류 내용을 기반으로 살펴보면, 이 문제는 주로 TypeScript와 Babel을 사용하면서 데코레이터와 관련된 설정이 맞지 않을 때 발생하는 오류입니다. 특히, 데코레이터를 사용하여 클래스를 정의할 때 발생할 수 있는 문제입니다.

다음은 이 문제를 해결하기 위한 몇 가지 일반적인 권장사항입니다:

  1. babel 설정 확인:

    • @babel/plugin-proposal-decorators@babel/plugin-proposal-class-properties 플러그인을 설치하고 사용 중인지 확인하세요.
    • .babelrc 또는 babel.config.js에서 두 플러그인의 순서가 정확해야 합니다. 데코레이터 플러그인이 클래스 속성 플러그인보다 앞에 있어야 합니다.
  2. tsconfig.json 파일 설정 확인:

    • experimentalDecoratorsemitDecoratorMetadata 설정이 true로 되어 있는지 확인해야 합니다. 만약 이미 설정하셨다면, 이 부분은 문제가 아닐 가능성이 큽니다.
  3. 데코레이터 사용하는 방식 점검:

    • 데코레이터가 활용된 모든 엔티티가 올바르게 설정되었는지 확인합니다. 데코레이터의 순서나 위치에 따라서 문제가 발생할 수 있습니다.

유사한 문제에 대한 다음의 게시물을 참고하시면 문제 해결에 도움이 될 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.