You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:59:55