Ng 服务抛出@angular/core/core 没有导出成员“eeFactoryDe​​f”

Hei*_*rme 52 angular

我收到了 50 个错误,都说 angular/core/core 没有导出成员“eeFactoryDe​​f”。

它们来自不同的 node_modules,例如 angular/cdk、ng-bootstrap、ngx-pipes、ng2-dragula 等等。我也没有从谷歌找到任何东西。

../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>;
Run Code Online (Sandbox Code Playgroud)

这是我的 package.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"
Run Code Online (Sandbox Code Playgroud)

这是我的开发依赖项:

"@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"
  }
Run Code Online (Sandbox Code Playgroud)

由于某种原因在谷歌上找不到任何信息。

per*_*ion 90

在更新了一些软件包(包括 Angular 从 8 到 9),然后再次降级后,我遇到了这个问题。

解决方案是取消node_modules文件夹,然后进行全新的 npm 安装。

  • npm ci 和删除 node_modules 之后出现同样的错误,是否还有其他问题,这些“解决方案”是相同问题的复制粘贴 (4认同)
  • 在拥有如此多的用户并成为“领先标准”包管理器之后,npm 怎么还会出现这样的问题...... (3认同)
  • 由于其他一些项目存在 polyfill 问题,我不得不调整自定义 webpack 配置后,我在 Angular 12 上得到了这个。我尝试删除 node_modules 但它仍然显示 ooFactoryDe​​f、ooNgModuleDefWithMeta 错误。开始怀疑是不是它的node或者npm版本有问题或者其他什么问题。 (3认同)

Lia*_*iam 36

很多人说这里的解决方案就是简单地“删除你的node_modules”。这可能有效,也可能无效


要了解为什么会出现这种情况,您需要了解为什么会出现此错误。这是由Angular 中的重大更改引起的,其中使用角度版本 x 生成的代码与角度版本 y 不兼容(发生在多个版本中,我目前在 10 到 13 之间获取它)。这eeFactoryDef是编译源代码时由 Angular 生成的方法。这种方法的名称多年来一直在变化。因此,删除 node_modules 是有效的,因为它假设您刚刚升级了 Angular,并且旧版本仍然存在。

这也解释了为什么这个问题有这么多不同的答案。角度不兼容可能存在于您的代码或其依赖项之一中。所有说“我在 x 库中得到这个”的人基本上都是因为这个根本问题。


但是,如果您有依赖性问题,您也可能会遇到此问题。诊断此问题的最简单方法是运行npm ls @angular/core. 这将列出链接到该库的所有库依赖项,例如我得到:

`-- 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要升级冲突的库,以便它们都使用相同(或兼容)版本的 Angular(并且删除和重新添加 node_modules 不会产生任何影响)。


另一个具有此症状的问题是Ivy 编译器。同样,这可能会在库和应用程序之间产生不兼容的构建。这里的解决方案取决于不兼容的位置。如果您的 lib 不是 Ivy,但您的应用程序是,那么您可以选择退出 Ivy请注意,这在 Angular 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
  }
}
Run Code Online (Sandbox Code Playgroud)

ngcc或者在安装后事件中运行:

包.json

{
   "scripts": {
       "postinstall": "ngcc"
   }
}
Run Code Online (Sandbox Code Playgroud)


rga*_*han 18

除了之前分享的原因/解决方案之外,可能发生这种情况的另一个原因是 npm 包与当前的 Angular 版本不兼容。

例如,我在运行后得到了这些npm i primeng。NPM 安装了最新版本(v12),但我只运行 ng11。

就我而言,解决方案是升级 Angular,但另一个解决方案是降级 npm 包。

  • 我在使用primeng时遇到了这个问题。问题似乎是 primeng 的 node_modules 中的 package.json 文件说它适用于旧版本的 Angular,但事实并非如此。 (4认同)

小智 12

我遇到了同样的错误。我使用的是 Angular 9.7.1,我首先尝试删除 node_modules 和 npm install 但它没有用,所以我最终修复了它,将它添加到 tsconfig.json:

"compilerOptions":{
 [...]
 "paths": {
      "@angular/*": ["./node_modules/@angular/*"]
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Alvaro 你能解释一下为什么这个可以解决这个问题吗谢谢 (5认同)