为啥在尝试升级 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.2
和npm 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/fire
和angularfire2
之间的区别吗?
看看这个:***.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 没有导出成员 ɵɵFactoryDeclaration", "命名空间 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 父组件的属性绑定到子组件时出现此错误?
Angular 从 1.6.6 升级到 6 时出现 $Injector 错误