能否在Angular 13应用中使用Angular 10构建的库?
Angular 10 构建的库兼容 Angular 13 项目的可行方案
问题根因
Angular 10 构建的第三方库默认使用已废弃的 View Engine 编译器输出产物,而 Angular 12 及以上版本的应用层已完全移除 View Engine 支持,仅能使用 Ivy 编译器构建。你收到的警告是因为项目配置中尝试关闭 Ivy 编译器,该配置在高版本 Angular 中已经完全失效,直接删除配置中enableIvy: false的相关项即可消除警告。
出现依赖缺失报错是因为 Ivy 编译器默认无法直接识别 View Engine 编译产物的依赖引用,需要额外配置兼容性处理规则。
方案1:升级旧库编译规则(长期稳定方案)
不需要调整业务项目配置,仅修改 Angular 10 库的编译配置后重新打包即可:
- 将库项目的 Angular 依赖升级至 12 及以上版本
- 修改库项目的
tsconfig.lib.json配置,开启 Ivy 部分编译模式:
{ "angularCompilerOptions": { "enableIvy": true, "compilationMode": "partial" } }
- 重新执行
ng build 你的库名打包,新输出的库产物可直接在 Angular 13 项目中安装引用,不会出现兼容性问题。
方案2:临时兼容方案(无需修改旧库)
注意:本方案为临时兼容方案,可能存在运行时逻辑/样式异常,优先推荐使用方案1
如果无法拿到旧库的源码修改,可直接在 Angular 13 项目中做以下配置:
- 确认项目中
@angular/compiler和@angular/compiler-cli的版本和项目核心 Angular 版本完全一致 - 打开
angular.json,在对应项目的architect > build > options节点下添加allowedCommonJsDependencies配置,将报错中提示的所有缺失依赖依次填入:
"allowedCommonJsDependencies": [ "报错提示的缺失依赖1", "报错提示的缺失依赖2" ]
- 修改根目录
tsconfig.json的angularCompilerOptions节点,关闭严格校验、开启库跳过检查:
{ "angularCompilerOptions": { "skipLibCheck": true, "fullTemplateTypeCheck": false, "strictInjectionParameters": false } }
- 清理构建缓存后重新启动项目:
# 清理node缓存 rm -rf node_modules/.cache # 重新运行项目 ng serve
内容的提问来源于stack exchange,提问作者Sahil Julka
相关产品推荐
相关产品推荐

