Ionic 4(非电容器)构建失败,出现 @firebase/logger 错误 [TS1068:无法在环境上下文中声明访问器]
Ionic 4 (not capacitor) build failed with @firebase/logger error [TS1068: An accessor cannot be declared in an ambient context]
将 firebase
和 @angular/fire
添加到我的项目后,Ionic 构建失败。我已经使用 firebase 和 angularFire 多年了,但是在构建时突然出现了这个问题。
似乎与文件 logger.d.ts
相关的问题,但是,我什至没有使用 firebase 的记录器。一定是内部电话,在网上搜索了几个小时但找不到答案,希望有人可能早些时候遇到过这个问题?可以说明一下吗?
下面是错误信息图片
> ng run app:build
ERROR in node_modules/@firebase/logger/dist/src/logger.d.ts:70:9 - error TS1086: An accessor cannot be declared in an ambient context.
70 get logLevel(): LogLevel;
~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:71:9 - error TS1086: An accessor cannot be declared in an ambient context.
71 set logLevel(val: LogLevel);
~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:77:9 - error TS1086: An accessor cannot be declared in an ambient context.
77 get logHandler(): LogHandler;
~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:78:9 - error TS1086: An accessor cannot be declared in an ambient context.
78 set logHandler(val: LogHandler);
~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:83:9 - error TS1086: An accessor cannot be declared in an ambient context.
83 get userLogHandler(): LogHandler | null;
~~~~~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:84:9 - error TS1086: An accessor cannot be declared in an ambient context.
84 set userLogHandler(val: LogHandler | null);
~~~~~~~~~~~~~~
[ERROR] An error occurred while running subprocess ng.
ng run app:build exited with exit code 1.
Re-running this command with the --verbose flag may provide more information.
我的 package.json 如下所示
"dependencies": {
"@angular/common": "~8.2.14",
"@angular/core": "~8.2.14",
"@angular/fire": "^5.4.2",
"@angular/forms": "~8.2.14",
"@angular/platform-browser": "~8.2.14",
"@angular/platform-browser-dynamic": "~8.2.14",
"@angular/router": "~8.2.14",
"@ionic-native/core": "^5.0.0",
"@ionic-native/device": "^5.23.0",
"@ionic-native/http": "^5.23.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^5.0.0",
"cordova-android": "8.1.0",
"cordova-ios": "5.1.1",
"cordova-plugin-advanced-http": "^2.4.1",
"cordova-plugin-file": "^6.0.2",
"core-js": "^2.5.4",
"firebase": "^7.13.1",
"lodash": "^4.17.15",
"rxjs": "~6.5.1",
"tslib": "^1.9.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.20",
"@angular/cli": "~8.3.23",
"@angular/compiler": "~8.2.14",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@ionic/angular-toolkit": "^2.1.1",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"@types/lodash": "^4.14.149",
"@types/node": "~8.9.4",
"codelyzer": "^5.0.0",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-ionic-keyboard": "^2.2.0",
"cordova-plugin-ionic-webview": "^4.1.3",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.3",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"npm-force-resolutions": "0.0.3",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.4.3"
},
如果有人可以,请提供帮助。
我在尝试从 7.11.0 及更高版本升级我的 firebase 包时也遇到了这个问题。尝试将 firebase 版本修复为 7.11.0.
至于真正的长期解决方案,我也很感兴趣。
解决方案 1
您需要使用 TypeScript 3.7。
从 TypeScript 3.7 release notes :
To detect the issue around accessors, TypeScript 3.7 will now emit get/set accessors in .d.ts files so that in TypeScript can check for overridden accessors.
因此您需要升级到 TypeScript 3.7 或使用更早版本的 Firebase
。
解决方案 2
在您的 tsconfig.json
中将 skipLibCheck
设置为 true
。
"compilerOptions": {
"skipLibCheck": true,
...
}
我遇到了 Ionic 4 的问题,我已将 Firebase 降级到 7.10。
不能将 Typescript > 3.6 与 Angular 8 一起使用,或者引发 ERROR in The Angular Compiler requires TypeScript >=3.4.0 and <3.6.0 but 3.8.3 was found instead.
我没有尝试切换 skipLibCheck
编译器选项,这似乎不是一个长期的解决方案。
顺便说一句,感谢大家的话题,拯救我的一天;-)
将 firebase
和 @angular/fire
添加到我的项目后,Ionic 构建失败。我已经使用 firebase 和 angularFire 多年了,但是在构建时突然出现了这个问题。
似乎与文件 logger.d.ts
相关的问题,但是,我什至没有使用 firebase 的记录器。一定是内部电话,在网上搜索了几个小时但找不到答案,希望有人可能早些时候遇到过这个问题?可以说明一下吗?
下面是错误信息图片
> ng run app:build
ERROR in node_modules/@firebase/logger/dist/src/logger.d.ts:70:9 - error TS1086: An accessor cannot be declared in an ambient context.
70 get logLevel(): LogLevel;
~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:71:9 - error TS1086: An accessor cannot be declared in an ambient context.
71 set logLevel(val: LogLevel);
~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:77:9 - error TS1086: An accessor cannot be declared in an ambient context.
77 get logHandler(): LogHandler;
~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:78:9 - error TS1086: An accessor cannot be declared in an ambient context.
78 set logHandler(val: LogHandler);
~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:83:9 - error TS1086: An accessor cannot be declared in an ambient context.
83 get userLogHandler(): LogHandler | null;
~~~~~~~~~~~~~~
node_modules/@firebase/logger/dist/src/logger.d.ts:84:9 - error TS1086: An accessor cannot be declared in an ambient context.
84 set userLogHandler(val: LogHandler | null);
~~~~~~~~~~~~~~
[ERROR] An error occurred while running subprocess ng.
ng run app:build exited with exit code 1.
Re-running this command with the --verbose flag may provide more information.
我的 package.json 如下所示
"dependencies": {
"@angular/common": "~8.2.14",
"@angular/core": "~8.2.14",
"@angular/fire": "^5.4.2",
"@angular/forms": "~8.2.14",
"@angular/platform-browser": "~8.2.14",
"@angular/platform-browser-dynamic": "~8.2.14",
"@angular/router": "~8.2.14",
"@ionic-native/core": "^5.0.0",
"@ionic-native/device": "^5.23.0",
"@ionic-native/http": "^5.23.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^5.0.0",
"cordova-android": "8.1.0",
"cordova-ios": "5.1.1",
"cordova-plugin-advanced-http": "^2.4.1",
"cordova-plugin-file": "^6.0.2",
"core-js": "^2.5.4",
"firebase": "^7.13.1",
"lodash": "^4.17.15",
"rxjs": "~6.5.1",
"tslib": "^1.9.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.20",
"@angular/cli": "~8.3.23",
"@angular/compiler": "~8.2.14",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@ionic/angular-toolkit": "^2.1.1",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"@types/lodash": "^4.14.149",
"@types/node": "~8.9.4",
"codelyzer": "^5.0.0",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-ionic-keyboard": "^2.2.0",
"cordova-plugin-ionic-webview": "^4.1.3",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.3",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"npm-force-resolutions": "0.0.3",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.4.3"
},
如果有人可以,请提供帮助。
我在尝试从 7.11.0 及更高版本升级我的 firebase 包时也遇到了这个问题。尝试将 firebase 版本修复为 7.11.0.
至于真正的长期解决方案,我也很感兴趣。
解决方案 1
您需要使用 TypeScript 3.7。
从 TypeScript 3.7 release notes :
To detect the issue around accessors, TypeScript 3.7 will now emit get/set accessors in .d.ts files so that in TypeScript can check for overridden accessors.
因此您需要升级到 TypeScript 3.7 或使用更早版本的 Firebase
。
解决方案 2
在您的 tsconfig.json
中将 skipLibCheck
设置为 true
。
"compilerOptions": {
"skipLibCheck": true,
...
}
我遇到了 Ionic 4 的问题,我已将 Firebase 降级到 7.10。
不能将 Typescript > 3.6 与 Angular 8 一起使用,或者引发 ERROR in The Angular Compiler requires TypeScript >=3.4.0 and <3.6.0 but 3.8.3 was found instead.
我没有尝试切换 skipLibCheck
编译器选项,这似乎不是一个长期的解决方案。
顺便说一句,感谢大家的话题,拯救我的一天;-)