@angular/platform-browser与@angular/platform-browser-dynamic的区别

62
在新的示例(例如seeds、angular.io等)中,引导过程中还有另一种导入方式:@angular/platform-browser-dynamic。请问这与@angular/platform-browser有何区别?官方的angular.io网站上还没有相关信息。
3个回答

70

platform-browser-dynamicplatform-browser的区别在于Angular应用程序的编译方式。

使用动态平台会使Angular将及时编译器与应用程序一起发送到前端,这意味着您的应用程序在客户端进行编译。

另一方面,使用platform-browser会导致预编译版本的应用程序被提前编译并发送到浏览器。这通常意味着向浏览器发送的包要小得多。

有关引导的文档中详细解释了这一点。


5
同意 Sunil 的看法。我认为这个答案之所以出色是因为它包含了文档链接 - 而且我认为文档非常相关和清晰。文档使用这些首字母缩写/术语,我们应该在这里强调一下:“Ahead-of-time”=“AOT”=“静态”,而“Just-in-Time”=“JIT”=“动态”。文档还有更多细节,但它们仍然是简单明了的,就像 niliuz 的答案一样!阅读它们! - Nate Anderson
那么,这是否意味着如果我使用 platform-browser-dynamic,就不需要包含 platform-browser 了? - Saeed Neamati
6
我认为这个答案已经不再相关了。当你运行 ng build 时,JIT 或 AOT 切换是通过命令行界面设置的。实际上,在 Angular 9 中,默认情况下启用了 AOT。在 AOT/JIT 切换的上下文中,导入 platform-browser-dynamicplatform-browser 是无关紧要的。 - Pavel Gurecki
嗨,Pavel,感谢您指出Angular 9的最新更改,这里是“默认启用AOT”的文档链接。 - Rov
我在切换动态或非动态模式时,没有看到捆绑包大小的差异。这是在Angular 12上。可能是树摇将未使用的内容删除了...或者如果您使用AOT,Angular就不会包含它。 - elliottregan

67
  • platform-browser 包含在浏览器执行(DOM 线程、Web Worker)时共享的代码。
  • platform-browser-dynamic 包含客户端代码,用于处理模板(绑定、组件等)和反射式依赖注入。

当使用离线模板编译器时,就不再需要 platform-browser-dynamic,因为所有反射访问和元数据都被转换为生成的代码。

如果仍想像 https://dev59.com/x1oV5IYBdhLWcg3wnv-y#36017067 中所示那样动态生成组件,则需要使用动态内容。


非常好的回答,谢谢Gunter!如果能够补充包含一个与另一个的捆绑包大小差异就更好了,因为我听说平台浏览器动态添加到最终捆绑包大小上会增加更多千字节。 - Rov
1
我认为这个答案在术语方面有点过时了。但基本上,使用动态组件,您需要一些编译器在运行时编译组件,这当然会增加包的大小。如果您不使用动态组件,则必须静态编译所有内容,但是组件编译器则不需要添加到包中。动态组件是指您在运行时生成组件模板(字符串连接,从其他服务器下载等),然后将其编译为Angular组件,以便将其添加到视图中。 - Günter Zöchbauer

4
如果你仔细看一下Angular2的历史,你会发现有两个版本:1)beta版和2)release candidate版。目前是rc3(release candidate 3)。发布候选版意味着在最终发布之前修复漏洞。因此,当Angular2从beta版移动到第一个发布候选版(rc1)时,它会进行一些目录更改……例如。
angular2/core---->@angular/core
angular2/platform/browser------>@angular/platform-browser-dynamic

我在这里加了一个截图:

这里是图片描述

欲知详情,请访问:

https://github.com/angular/angular/blob/master/CHANGELOG.md

希望您能找到答案。谢谢。


15
历史很有趣,但是这个回答的文本并没有回答所问的问题,并且错误地暗示了 angular2/platform/browser 项目被重命名为 @angular/platform-browser-dynamic,正如 @user2227400 指出的那样。 - Aejay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接