programing

@angular/core/core에서 Ng serve throwing @에 내보낸 멤버 'eFactoryDef'이 없습니다.

muds 2023. 8. 24. 22:29
반응형

@angular/core/core에서 Ng serve throwing @에 내보낸 멤버 'eFactoryDef'이 없습니다.

각/코어/코어에 내보낸 멤버 'eFactoryDef'가 없다는 오류가 50개 정도 발생했습니다.

이들은 angular/cdk, ng-bootstrap, ngx-pipes, ng2-dragula 등과 같은 서로 다른 node_modules에서 왔습니다.저도 구글에서 아무것도 찾지 못했습니다.

../node_modules/@angular/cdk/drag-drop/typings/directives/drag-handle.d.ts:23:33 - error TS2694: Namespace '"/Users/heikopiirme/Documents/realNewClient/client/node_modules/@angular/core/core"' has no exported member 'ɵɵFactoryDef'.

23     static ngFactoryDef: ɵngcc0.ɵɵFactoryDef<CdkDragHandle>;

이것은 제 소포입니다.json 파일:

다음은 나의 종속 관계입니다.

    "@angular-skyhook/core": "^1.1.1",
    "@angular-skyhook/multi-backend": "^1.1.1",
    "@angular/animations": "^8.2.6",
    "@angular/cdk": "^8.2.0",
    "@angular/common": "^8.2.6",
    "@angular/compiler": "^8.2.6",
    "@angular/core": "^8.2.6",
    "@angular/forms": "^8.2.6",
    "@angular/http": "^7.1.4",
    "@angular/material": "^8.2.0",
    "@angular/platform-browser": "^8.2.6",
    "@angular/platform-browser-dynamic": "^8.2.6",
    "@angular/router": "^8.2.6",
    "@ng-bootstrap/ng-bootstrap": "^5.1.1",
    "@ng-select/ng-select": "^3.0.7",
    "@swimlane/ngx-datatable": "^13.1.0",
    "@types/googlemaps": "^3.36.5",
    "angular2-draggable": "^2.3.1",
    "bootstrap": "^4.2.1",
    "core-js": "^2.6.1",
    "drag-drop-webkit-mobile": "^1.4.1",
    "exif-js": "^2.3.0",
    "hammerjs": "^2.0.8",
    "mobile-drag-drop": "^2.3.0-rc.2",
    "moment": "^2.24.0",
    "moment-range": "^4.0.2",
    "net": "^1.0.2",
    "ng2-dnd": "^5.0.2",
    "ng2-dragula": "^2.1.1",
    "ng2-file-upload": "^1.3.0",
    "ng2-img-max": "^2.1.18",
    "ngx-bar-rating": "^1.1.0",
    "ngx-bootstrap": "^4.3.0",
    "ngx-material-timepicker": "^5.1.0",
    "ngx-permissions": "^5.0.0",
    "ngx-pipes": "2.5.6",
    "ngx-toastr": "^10.0.4",
    "react-dnd-html5-backend": "^7.6.0",
    "rxjs": "^6.5.3",
    "sockjs-client": "^1.3.0",
    "stompjs": "^2.3.3",
    "touchscreen-dnd-shim": "^1.2.2",
    "underscore": "^1.9.1",
    "zone.js": "~0.9.1"

다음은 제 개발 종속성입니다.

"@angular-devkit/build-angular": "^0.803.4",
    "@angular/cli": "~8.3.4",
    "@angular/compiler-cli": "^8.2.6",
    "@angular/language-service": "^8.2.6",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "^8.9.5",
    "codelyzer": "~5.0.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~3.1.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "node-sass": "^4.12.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "typescript": "~3.5.3"
  }

어떤 이유로 구글에서 어떤 정보도 찾을 수 없었습니다.

일부 패키지(Angular 8에서 9까지 포함)를 업데이트한 후 다시 다운그레이드한 후 이 문제가 발생했습니다.

해결책은 핵무기를 만드는 것이었습니다.node_modules폴더를 선택한 다음 npm을 새로 설치합니다.

많은 사람들이 여기서 해결책은 단순히 "node_modules를 삭제하는 것"이라고 말합니다.이것은 작동할 수도 있고 작동하지 않을 수 있습니다.


이러한 오류가 발생하는 이유를 이해하려면 이러한 오류가 발생하는 이유를 이해해야 합니다.이는 Angular에서 Angular version x를 사용하여 생성된 코드가 Angular version y와 호환되지 않는 Breaking Change로 인해 발생합니다(여러 버전에서 발생하며 현재 10과 13 사이에서 발생합니다).eeFactoryDef소스가 컴파일될 때 Angular에 의해 생성되는 메서드입니다.이 방법의 이름은 수년에 걸쳐 변경되었습니다.따라서 delete node_modules는 당신이 방금 각진 버전을 업그레이드했고 오래된 버전이 아직 남아 있다고 가정하기 때문에 작동합니다.

이것은 또한 이 질문에 대해 왜 그렇게 많은 다른 답들이 있는지 설명합니다.각 비호환성이 코드 또는 코드 종속성 중 하나에 있을 수 있습니다."나는 x 라이브러리에서 이것을 얻는다"라고 말하는 모든 사람들은 기본적으로 이 근본적인 문제 때문입니다.


그러나 종속성 문제가 있는 경우에도 이 문제가 발생할 수 있습니다.이 문제를 진단하는 가장 쉬운 방법은 실행하는 것입니다.npm ls @angular/core여기에는 이 lib에 연결되는 모든 라이브러리 종속성이 나열됩니다. 예를 들어 다음과 같은 정보가 표시됩니다.

`-- UNMET PEER DEPENDENCY @angular/core@13.2.5

npm ERR! peer dep missing: @angular/core@~11.2.13, required by blah@2.1.1
npm ERR! peer dep missing: @angular/core@12.2.15, required by blah@13.0.4
npm ERR! peer dep missing: @angular/core@^11.0.5, required by blah@11.0.5
npm ERR! peer dep missing: @angular/core@^6.0.0 || ^7.0.0 || ^8.0.0, required by ngx-avatar@3.7.0

이 시나리오에서는 충돌하는 라이브러리를 업그레이드하여 모든 라이브러리가 동일한(또는 호환 가능한) 버전의 각도를 사용하도록 해야 합니다(node_modules를 삭제하고 다시 추가해도 아무런 차이가 없습니다).


이것을 증상으로 가지고 있는 또 다른 문제는 아이비 컴파일러입니다.라이브러리와 응용프로그램 간에 호환되지 않는 빌드가 생성될 수 있습니다.여기서 해결책은 비호환성이 어디에 있는지에 따라 달라집니다.lib가 ivy가 아니지만 응용 프로그램이 ivy가 아니라면 ivy에서 탈퇴할 수 있습니다(각도 12에서 현재 비활성화됨).

tsconfig.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/app",
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ],
  "angularCompilerOptions": {
    "enableIvy": false
  }
}

또는 실행ngcc설치 후 이벤트:

꾸러미제이손

{
   "scripts": {
       "postinstall": "ngcc"
   }
}

같은 오류가 발생하고 있습니다.Angular 9.7.1을 사용하고 있습니다. 처음에 node_modules와 npm 설치를 삭제하려고 했지만 작동하지 않아서 tsconfig.json에 추가하여 수정했습니다.

"compilerOptions":{
 [...]
 "paths": {
      "@angular/*": ["./node_modules/@angular/*"]
    }
}

이전에 공유된 이유/솔루션 외에도 npm 패키지가 현재 Angular 버전과 호환되지 않는 경우에도 이러한 문제가 발생할 수 있습니다.

예를 들어, 나는 달리기를 한 후에 이것들을 받았습니다.npm i primengNPM은 최신 버전(v12)을 설치했지만 저는 ng11만 실행하고 있었습니다.

저의 경우 Angular를 업그레이드하는 것이 해결책이었지만, 다른 해결책은 npm 패키지를 다운그레이드하는 것입니다.

다른 기능 분기에서 Angular 10으로 업그레이드하려고 할 때 동일한 문제가 발생하지 않습니다.

'node_message' 폴더를 엉망으로 만들었습니다.

솔루션:

려달을 npm ci.

저의 경우, ngx-toastr에 의해 발생했습니다.많은 히트 및 트라이얼 후 아래 접근 방식을 사용하여 해결:

  1. 먼저 command ng version을 사용하여 angular 버전을 확인했습니다.
  2. https://www.npmjs.com/package/ngx-toastr 방문하여 제 각진 버전에 적합한 토스트 버전을 확인했습니다.
  3. 적합한 버전의 토스터를 설치했습니다.

저는 최근에 ng-lazy load-image 플러그인과 비슷한 문제를 겪고 있었습니다.

우리는 Angular 9와 패키지를 사용하고 있었습니다.우리가 부르던 json"ng-lazyload-image": "^9.1.0"

을 다변했습니경으로 바꿨습니다."ng-lazyload-image": "9.1.0"젠킨스에게서 빌드가 작동하기 시작했습니다.

이 플러그인과 관련하여 동일한 문제에 직면한 다른 사용자를 돕기 위해 여기에 게시합니다.

peregration에서 언급한 것처럼 Angular 8과 9 사이를 여러 번 전환할 때 문제가 발생했습니다.

저에게 해결책은 "node_module"을 삭제하고 "npm install"을 다시 실행하는 것이 아니라 오류에 언급된 npm 패키지를 제거하고 8개의 호환 버전으로 다시 설치하는 것이었습니다.

ERROR in node_modules/ngx-infinite-scroll/src/modules/infinite-scroll.directive.d.ts:27:25 - error TS2694: Namespace '"/opt/atlassian/pipelines/agent/build/node_modules/@angular/core/core"' has no exported member 'ɵɵFactoryDef'.
27     static ɵfac: ɵngcc0.ɵɵFactoryDef<InfiniteScrollDirective, never>;
                           ~~~~~~~~~~~~
node_modules/ng-click-outside/lib_commonjs/click-outside.directive.d.ts:34:25 - error TS2694: Namespace '"/opt/atlassian/pipelines/agent/build/node_modules/@angular/core/core"' has no exported member 'ɵɵFactoryDef'.
34     static ɵfac: ɵngcc0.ɵɵFactoryDef<ClickOutsideDirective, never>;

라이브러리 중 하나의 호환성 문제일 수 있습니다.예: 라이브러리에서는 Angular 12를 사용할 것으로 예상하지만 프로젝트는 Angular 11을 대신 실행합니다.도서관을 .package.json기록하고 더 큰 Angular 버전을 실제로 사용하고 있는지 확인합니다.그렇다면 두 가지 옵션이 있습니다.

  1. Angular 버전을 라이브러리 버전과 동일하게 업그레이드합니다.
  2. 라이브러리 버전을 사용자 버전과 동일한 Angular 버전을 사용한 경우로 다시 다운그레이드합니다(라이브러리가 해당 Angular 버전을 사용하지 않은 경우에는 불가능할 수 있음).

저는 오늘 프로젝트를 피처 브랜치에서 Angular 12로 업데이트한 후 여전히 Angular 10이었던 브랜치를 메인으로 다시 전환한 후 이 문제를 해결했습니다.게다가 나는 그 오류를 알아차렸습니다.Another process, with id 95467, is currently running ngcc.그것은 진행되었습니다.x was not found in @angular/core오류그러나 다른 설치/빌드/서비스 작업을 실행하지 않았습니다.

다음 명령을 실행한 후 이 문제가 해결되었습니다.

npm ci
ng update

업데이트를 제안했습니다.@angular/core그리고.@angular/cli12.2.9에서 -> 12.2.10으로 실행했습니다.

ng update @angular/core @angular/cli

그리고 나서 달릴 수 있었습니다.npm startAngular 12 앱 실행

ngx-mask 패키지를 통합하려고 할 때도 같은 문제에 직면했습니다.

문제 이유: 각 버전은 9.0.1이었고 ngx-mask 버전은 더 높았습니다.

해결책 : ngx-mask 버전을 내 각진 버전과 호환되는 9.0.1로 다운그레이드했습니다.

이 오류는 Angular 12 이전에 작성된 라이브러리에 따라 달라지는 Angular 12를 사용하는 프로젝트가 있는 경우 발생할 수 있습니다.

문제를 해결하려면 Angular 12까지 라이브러리를 따라잡아야 합니다.

메인 프로젝트는 Angular 8이었고 Angular 9가 있는 패키지가 설치되었을 때 이 문제가 발생했습니다.업그레이드 단계: https://update.angular.io - 특히 최신 버전 8로 업그레이드ng update @angular/core@8 @angular/cli@8그리고 9시까지ng update @angular/core@9 @angular/cli@9.

이 문제는 우리 프로젝트에 라이브러리레이를 설치할 때도 발생하며, 이에 대한 해결책은 당신이 가지고 있는 각진 버전과 라이브러리의 버전 호환성을 확인해야 한다는 것입니다.

ngx-indexed-db를 설치했는데 이 오류가 발생했습니다. Ngserver throwing @angular/core/core에 내보낸 멤버가 없습니다. 순전히 버전 기반 오류였습니다. 이 명령을 사용하여 라이브러리를 다운그레이드하여 해결했습니다.

npmingx-dll-db@9.1.0

빠른 해결 - 패키지의 Angular 버전을 확인합니다.그런 다음 Angular CLI 일치 버전이 NPM에 전체적으로 설치되었는지 확인합니다.

예를 들어 프로젝트에 Angular 10.2.4를 설치한 경우 다음을 수행하여 해당 Angular CLI도 전체적으로 추가해야 합니다.

npm install -g @angular/cli@10.2.4

ng update @sys/cli @sys/core --allow-message

저한테는 효과가 있어요.

폴더 삭제node_modules 실니다를 합니다.npm i

언급URL : https://stackoverflow.com/questions/58078033/ng-serve-throwing-angular-core-core-has-no-exported-member-eefactorydef

반응형