为啥在尝试升级 Angular 时出现“没有导出成员”错误?

Posted

技术标签:

【中文标题】为啥在尝试升级 Angular 时出现“没有导出成员”错误?【英文标题】:Why am I getting "no exported member" errors when attempting to upgrade Angular?为什么在尝试升级 Angular 时出现“没有导出成员”错误? 【发布时间】:2021-07-03 08:42:34 【问题描述】:

问题

我正在尝试从 Angular V9 升级到 V11,但遇到以下错误时遇到了很多困难

Namespace node_module/@angular/core/core has no exported member ɵɵFactoryDeclaration Namespace node_module/@angular/core/core has no exported member ɵɵInjectorDeclaration Namespace node_module/@angular/core/core has no exported member ɵɵNgModuleDeclaration Namespace node_module/@angular/core/core has no exported member ɵɵɵComponentDeclaration

但我不完全确定这意味着什么以及如何解决它。

我尝试了什么

我看过一个类似的问题:Ng serve throwing @angular/core/core has no exported member 'eeFactoryDef',这是我能找到的关于这个问题的唯一线索,但它并没有真正帮助我。

我尝试删除我的整个 node_modules 文件夹并使用 npm i 重新安装 npm 依赖项。我也试过npm ci。我也尝试添加

      "@angular/core/*": [
        "./node_modules/@angular/core/*"
      ]

      "@angular/*": [
        "./node_modules/@angular/*"
      ]

我的tsconfig.json,但这也没有帮助。

我认为是什么问题

我对此一无所知,但我认为我的 NPM 依赖项的路径有问题,因为它引用了@angular/core/core,但我的node_modules 中没有这样的文件夹。

如果我转到node_modules/@angular/core/core.d.ts 文件,我相信它是/core/core 路径,虽然我不确定,但我也会在那里看到同样的错误,这让我更加困惑,因为我认为问题出在 Angular 和依赖项之间,而不是 Angular 本身。

Package.json


  "name": "WorthaShot",
  "version": "0.0.3",
  "scripts": 
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "build:prod": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  ,
  "private": true,
  "dependencies": 
    "@angular/animations": "~12.0.0-next.7",
    "@angular/cdk": "^11.2.7",
    "@angular/common": "~12.0.0-next.7",
    "@angular/compiler": "~12.0.0-next.7",
    "@angular/core": "~11.2.8",
    "@angular/fire": "^6.1.4",
    "@angular/flex-layout": "^10.0.0-beta.32",
    "@angular/forms": "~12.0.0-next.7",
    "@angular/material": "^11.2.7",
    "@angular/platform-browser": "~12.0.0-next.7",
    "@angular/platform-browser-dynamic": "~12.0.0-next.7",
    "@angular/router": "~12.0.0-next.7",
    "@angular/service-worker": "~12.0.0-next.7",
    "@fortawesome/angular-fontawesome": "^0.8.2",
    "@fortawesome/fontawesome-common-types": "^0.2.35",
    "@fortawesome/fontawesome-svg-core": "^1.2.35",
    "@fortawesome/free-brands-svg-icons": "^5.15.3",
    "@fortawesome/free-solid-svg-icons": "^5.15.3",
    "@ngbmodule/material-carousel": "^0.7.1",
    "@ngx-meta/core": "^9.0.0",
    "@ngx-translate/core": "^13.0.0",
    "@ngx-translate/http-loader": "^6.0.0",
    "firebase": "^8.3.2",
    "flag-icon-css": "^3.5.0",
    "guid-typescript": "^1.0.9",
    "ngx-color-picker": "^10.1.0",
    "ngx-image-compress": "^8.0.4",
    "ngx-markdown": "^10.1.1",
    "ngx-sharebuttons": "^8.0.5",
    "ngx-spinner": "^10.0.1",
    "ngx-toastr": "^13.2.1",
    "rxjs": "~6.6.7",
    "tslib": "^2.2.0",
    "zone.js": "~0.10.2"
  ,
  "devDependencies": 
    "@angular-devkit/build-angular": "^0.1102.7",
    "@angular/cli": "~11.2.7",
    "@angular/compiler-cli": "~12.0.0-next.7",
    "@angular/language-service": "~12.0.0-next.7",
    "@types/jasmine": "~3.6.0",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "^14.14.37",
    "codelyzer": "^6.0.1",
    "jasmine-core": "~3.6.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~6.3.2",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~3.0.2",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "^1.5.0",
    "protractor": "~7.0.0",
    "ts-node": "~8.10.2",
    "tslint": "~6.1.3",
    "typescript": "^4.2.3"
  


我在这里遗漏或不理解什么?

【问题讨论】:

不知道是什么原因造成的,但是使用guide from Angular itself逐个版本升级,我再也没有收到错误了。不要像我一样傻。 【参考方案1】:

即使没有升级,我也会收到此错误。我得到了 "@angular/core": "~9.1.1"Node v12.16.2npm 4.0.2 。它是由 primeNg 组件发生的。我升级到 node: '14.17.0' 和 npm 到 npm: '6.14.13',创建了一个新的 Angular 应用程序,重新安装了包括 primeNg 在内的所有依赖项,添加了当前项目中的所有代码,重新编译并且错误消失了。

【讨论】:

谢谢。有同样的问题(多个节点版本,和一个空白的大脑(即项目切换之间的一个周末:P) 注意:切换节点版本时,我必须重新安装 node_modules(删除并安装),因为我运行 npm install 时使用了错误的 node.js 版本【参考方案2】:

所以我在做 FireBase 教程时遇到了这个问题

本教程建议我这样做:

    通过运行 npm install @angular/fire 安装 angular fire 将所有出现的 angularfire2 替换为 @angular/fire(导入时) 将所有出现的 afAuth.auth 替换为 afAuth

执行此操作时,我还必须在 tsConfig 文件中启用 allowSyntheticDefaultImports(在编译器选项下,“allowSyntheticDefaultImports”:true)。

这解决了我的问题。

【讨论】:

感谢您,我遇到了完全相同的问题。他们需要更新他们的文档。只是好奇,你知道@angular/fireangularfire2之间的区别吗? 看看这个:***.com/questions/41573769/firebase-vs-angularfire【参考方案3】:

如果您在安装 primeng 后遇到问题,请注意最新版本的 primeng (12.0.0-rc.1) 不适用于最新版本的 angular。您需要安装更早版本的primeng,对我来说11.4 完美运行!

npm i primeng@11.4.2

【讨论】:

虽然npm install的“棘手”行为默认使用“最新”,但我认为PrimeNG的人应该阅读this enlightening post about npm prereleases versioning并在发布时使用--tag next以避免此类问题. 也许避免这个陷阱的一个好方法是始终以这种方式安装东西:npm i package-name@* 这个答案完全解决了我的问题。 Angular 11 和最新版本的 PrimeNg 互不喜欢。谢谢。 我升级了 Node 和 NPM,但是没有用。这就是答案。【参考方案4】:

我也面临同样的问题。

这个link 可能会有所帮助。

这些是官方更新指南中的步骤: 如果您依赖本地化,请先运行以下命令:

ng add @angular/localize

通过对 $localize() 进行必要的重构,使本地化在您的代码中发挥作用

运行这些命令
ng update @angular/core@10 @angular/cli@10
ng update @angular/core@11 @angular/cli@11

更新到 typescript 4

【讨论】:

【参考方案5】:

对于这个错误:

"命名空间 node_module/@angular/core/core 没有导出成员 ɵɵFactoryDe​​claration", "命名空间 node_module/@angular/core/core 有 没有导出成员 ɵɵInjectorDeclaration"

你应该替换这个:

static ɵfac: i0.ɵɵFactoryDef < ScreenTrackingService, [null, 
  optional: true;
, 
  optional: true;
, null, 
  optional: true;
] > ;

有了这个:

static ɵprov: i0.ɵɵInjectableDef<ScreenTrackingService>;

在 ScreenTrackingService 组件中。

【讨论】:

我试图将您的帖子格式化为可解读的内容。请根据需要进一步修改。【参考方案6】:

所以,在过去的几天里,我在这个问题上花了几个小时,虽然这里有很多有用的答案,但我想我会加入。从错误本身来看,很明显这主要是依赖注入的问题。随着我们更新版本,许多 Angular 包都会中断。对我来说,这是在升级 firebase 模块时发生的。

Angular 改变了它跨版本以及模块位置导入和读取模块的方式,这导致了这个问题。 @angular/localize 绝对是一个有用的模块。

此外,关于 firebase 的主题 - 它在任何地方都没有得到很好的记录,但 angularfire2 和 @angular/fire 不能一起工作 并且 @angular/fire 是 angularFire 现在所在的位置,正如在安装包:

【讨论】:

【参考方案7】:

我找到的最简单的解决方案是找到错误文件(VS 代码将提供指向提示错误的文件的链接)然后确定罪魁祸首依赖项,现在从 package.json 中删除或更新依赖项以修复错误。记得做

npm 安装

如果你删除它。

【讨论】:

【参考方案8】:

这个错误的原因是你的库不是最新的。

检查app.module.ts 文件。

按顺序删除,然后安装新示例。

【讨论】:

以上是关于为啥在尝试升级 Angular 时出现“没有导出成员”错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在尝试将 Angular 父组件的属性绑定到子组件时出现此错误?

为啥调用 API 时出现 CORS 错误

Angular 从 1.6.6 升级到 6 时出现 $Injector 错误

为啥在尝试安装 FiPy 时出现错误?

尝试 lint Angular 模板时出现 ESLint 错误

引用 Angular 1.5 时出现无效的“引用”指令语法错误