【问题标题】:How to conditionally exclude an angular component from production build?如何有条件地从生产构建中排除角度组件?
【发布时间】:2025-12-02 13:05:02
【问题描述】:

我们有一个用例,其中一个公共存储库将用于不同的产品,比如产品 X 和 Y。
该存储库具有角度组件 A、B、C。

具体来说,对于产品 Y,我们需要在进行生产构建时排除组件 B。

组件 B 添加了它的选择器,例如,在另一个组件中。
它是 app.module.ts 中的条目。

我正在考虑使用环境变量的条款,但不确定它如何应用于我们的案例。

根据组件的构建有条件地排除组件的最佳方法是什么?
正在寻找一种临时的、不可扩展的解决方案。

任何帮助将不胜感激。

【问题讨论】:

    标签: angular environment-variables production-environment angular-components


    【解决方案1】:

    @Naveen,我认为您需要做的是进一步将组件分离到公共存储库中的模块中。例如:在公共存储库中,模块 X 将具有组件 A 和 C,而模块 Y 将具有组件 B。或者更进一步,每个组件在存储库中都有自己的模块。然后您需要将您的存储库发布到 npm,这样您就可以只导入您的产品所需的组件。

    注意:为了更好的可重用性,将在不同产品中使用的通用组件的存储库作为 npm 包通常是一个行业标准。

    另外,在我看来,还没有办法有条件地从构建中排除组件。您可能必须弹出并手动配置 webpack 配置文件以满足此要求。

    【讨论】:

    • 感谢您的投入 Malhar。现在,我们的案例只要求我们从项目 Y 中排除 1 个特定组件(例如,组件 B)。项目 X 将拥有全部三个,项目 Y 将只有 2 个。您知道我们是否可以从“fileReplacements”中实现这一点在 angular.json 中?
    • 我个人没有使用过“文件替换”,但它似乎只适用于 Angular 文档中的环境文件。我不确定这是否可以在构建级别上实现而不接触 webpack 配置文件。
    • 另外,“通过这种方式,您可以只导入您的产品所需的组件。” 您将如何做到这一点?