【问题标题】:Does Angular Build Unused Components From Third Party Angular ModulesAngular 是否从第三方 Angular 模块构建未使用的组件
【发布时间】:2018-09-26 02:30:29
【问题描述】:

有一个组件库,其中包含 100 个 Angular 模块内的组件。考虑一下,如果有人使用该库构建自己的应用程序并且只导入组件 1、2 和 3。

当使用nb build 构建该应用程序时,模块内的所有 100 个组件都会被编译还是只编译组件 1、2 和 3。

【问题讨论】:

    标签: angular build


    【解决方案1】:

    这取决于构建 Angular 应用程序时使用的构建选项。使用时默认

    ng build --prod

    构建 Angular cli 将编译所有 100(n) 个组件并捆绑到应用程序中。但是当使用

    ng build --prod --build-optimizer

    未使用的组件将被丢弃。所以只编译和构建了 1,2 和 3 个组件。但是,这可能会引入一些错误。

    当使用--build-optimizer 选项时,webpack 上会发生三个摇晃的过程(树摇晃是 JavaScript 上下文中常用的一个术语,用于消除死代码)。以下文章对解决此问题很有帮助,

    【讨论】:

      【解决方案2】:

      这取决于模块文件的声明数组。只有在模块文件的声明数组中添加的组件,才会包含在 angular-cli 生成的构建中。

      【讨论】:

      • 有任何来源可以确认吗?
      • 我尝试了几次,并在回答之前再次测试了这个。你也可以。在您的应用程序中创建一个组件并在其 ts 文件中定义一个字符串。用唯一的文本初始化它,例如“我喜欢编码”。从模块声明中删除此组件并构建项目。构建后,尝试在构建的主包 js 和所有块捆绑 js 文件(在延迟加载的情况下)中查找该文本。你不会找到它。现在在模块声明中添加组件并再次构建。再次构建后,您将在主包或块包 js 中找到该文本。希望这会有所帮助。
      • 嗨,Nabil,哇,那是切肉刀。但是外部模块呢?由此我们可以猜测一个组件不会被编译。但是一个模块呢,你知道的,因为每个模块在编写外部组件库时都会导入里面的所有组件来导出
      • 对于外部模块,导入模块声明中的所有组件都会为当前模块编译,即使该组件不在导出中。
      • 是的,请看我的回答
      猜你喜欢
      • 2020-07-12
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 2019-02-13
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      相关资源
      最近更新 更多