NG3003报错:无法发布Ivy全编译模式编译的包,如何跳过检查?
解决Angular NG3003错误与循环组件发布问题
错误原因
NG3003是Angular CLI的发布检查机制,阻止发布仅包含全Ivy编译产物的库——这类库无法被使用View Engine的旧版Angular项目兼容,因此官方默认禁止发布。
方案一:在Partial Ivy模式下兼容循环组件(推荐)
你不需要切换到全Ivy就能处理循环组件依赖,通过forwardRef和@Inject即可解决组件间的循环引用问题,示例如下:
循环组件示例代码
组件A (component-a.ts):
import { Component, forwardRef } from '@angular/core'; import { ComponentB } from './component-b'; @Component({ selector: 'app-component-a', template: `<app-component-b *ngIf="showB"></app-component-b>` }) export class ComponentA { showB = true; }
组件B (component-b.ts):
import { Component, forwardRef, Inject } from '@angular/core'; import { ComponentA } from './component-a'; @Component({ selector: 'app-component-b', template: `<app-component-a *ngIf="showA"></app-component-a>` }) export class ComponentB { showA = true; // 若需要注入循环依赖的组件,用forwardRef包装 constructor(@Inject(forwardRef(() => ComponentA)) private componentA: ComponentA) {} }
这种方式在默认的Partial Ivy编译模式下即可正常工作,编译后的库也能兼容所有支持Ivy的Angular版本,不会触发NG3003错误。
方案二:强制绕过NG3003检查(不推荐)
如果你确实需要以全Ivy模式发布库(比如依赖了全Ivy独有的特性),可以通过以下配置跳过检查:
1. 修改库编译配置
在库项目的ng-package.json中添加:
{ "compilationMode": "full", "skipLibCheck": true }
或者在angular.json对应库项目的architect.build.options里配置:
{ "options": { "compilationMode": "full", "skipLibCheck": true } }
2. 发布时跳过检查
执行发布命令时添加--skip-ng-packagr-check参数:
ng publish --skip-ng-packagr-check
⚠️ 注意风险:全Ivy编译的库只能被Angular 12+(默认启用全Ivy)的项目消费,无法兼容仍在使用View Engine的旧项目。
内容的提问来源于stack exchange,提问作者Yagi
相关产品推荐
相关产品推荐

