Angular 4与@angular/material兼容问题:依赖冲突陷入循环求助
解决Angular版本与Material、第三方依赖的兼容循环问题
我明白你现在卡在版本依赖的死循环里了——想装Angular Material就得升级Angular,但升级后老的依赖包又不兼容,确实头疼。下面给你两个可行的解决方案,你可以根据项目需求选择:
方案一:全量升级到Angular 6生态(彻底解决,推荐长期维护)
这个方案会把所有依赖同步到Angular 6兼容的版本,从根源上消除依赖冲突:
- 替换
angular2-jwt为Angular 6兼容版本
旧的angular2-jwt只支持Angular 2/4,Angular 6+推荐使用官方维护的替代包:npm uninstall angular2-jwt npm install @auth0/angular-jwt@^3.0.0 --save - 升级
codelyzer到兼容Angular 6的版本
Angular 6需要codelyzer4.x版本,执行:npm install codelyzer@^4.0.0 --save-dev - 同步rxjs版本到Angular 6要求的6.x
Angular 6依赖rxjs 6.x,若项目存在旧rxjs语法,可安装rxjs-compat做过渡兼容:npm install rxjs@^6.0.0 rxjs-compat@^6.0.0 --save - 安装匹配Angular 6的Material/CDK版本
选择Angular 6对应的Material稳定分支版本:npm install --save @angular/material@^6.4.7 @angular/cdk@^6.4.7 - 执行完整依赖安装
完成后所有依赖即可正常兼容,后续可逐步移除npm installrxjs-compat并迁移到rxjs 6的新语法规范。
方案二:安装与Angular 4兼容的旧版Material(快速解决,适合短期需求)
如果你不想升级整个Angular版本,可以直接安装和Angular 4匹配的Material 2.x版本:
npm install --save @angular/material@^2.0.0-beta.12 @angular/cdk@^2.0.0-beta.12
这个版本和你当前的Angular 4依赖完全匹配,不会出现peer依赖警告,缺点是Material的功能不如新版本丰富,且后续不再维护。
注意事项
- 选择方案一的话,需要调整部分代码:比如rxjs 6的操作符导入方式变化,
@auth0/angular-jwt的API和旧版angular2-jwt不同,建议参考对应包的官方迁移说明调整。 - 选择方案二的话,要使用Angular Material 2.x的对应版本文档来开发,避免使用新版本的API。
内容的提问来源于stack exchange,提问作者Nitin
相关产品推荐
相关产品推荐

