【问题标题】:@angular/platform-browser vs. @angular/platform-browser-dynamic@angular/platform-b​​rowser 与 @angular/platform-b​​rowser-dynamic
【发布时间】:2016-10-25 21:32:15
【问题描述】:

在较新的示例(seeds、angular.io、..)中,还有一个用于引导过程的导入:@angular/platform-browser-dynamic

谁能解释一下,它和@angular/platform-browser有什么区别?

angular.io 官方网站上还没有任何信息。

【问题讨论】:

    标签: browser import angular bootstrapping


    【解决方案1】:

    platform-b​​rowser-dynamic 和 platform-b​​rowser 之间的区别在于编译 Angular 应用程序的方式。

    使用动态平台可以将即时编译器发送到前端以及您的应用程序。这意味着您的应用程序正在客户端编译。

    另一方面,使用平台浏览器会导致您的应用程序的 Ahead-of-Time 预编译版本被发送到浏览器。这通常意味着发送到浏览器的包要小得多。

    https://angular.io/docs/ts/latest/guide/ngmodule.html#!#bootstrap 上用于引导的 angular2 文档更详细地解释了它。

    【讨论】:

    • 这是最准确的答案。这解释了根本区别,即 JIT 与提前编译。这个问题的其他答案具有误导性,而且过于复杂。
    • 同意苏尼尔。我认为这个答案很出色,因为它包含指向文档的链接——而且我认为这些文档非常相关且清晰。文档使用这些首字母缩略词/术语,我们应该在此强调:“Ahead-of-time” = “AOT” = “Static” vs “Just-in-Time "="JIT"="动态"。并且文档有更多细节,但它们仍然是简单直接,就像 niliuz 的回答一样!阅读它们!
    • 那么,这是否意味着如果我使用platform-browser-dynamic,那么我就不需要包含platform-browser
    • 文档链接已损坏
    • 我认为这个答案不再相关。运行ng build 时,通过 CLI 设置 JIT 或 AOT 开关。事实上,在 Angular 9 中,AOT 默认是启用的。导入 platform-browser-dynamicplatform-browser 与 AOT/JIT 切换的上下文无关。
    【解决方案2】:
    • platform-b​​rowser 包含为浏览器执行共享的代码(DOM 线程、WebWorker)
    • platform-b​​rowser-dynamic 包含处理模板(绑定、组件等)和反射依赖注入的客户端代码

    当使用离线模板编译器时,平台浏览器动态不再是必需的,因为所有反射访问和元数据都被转换为生成的代码。

    如果您仍想动态生成像https://stackoverflow.com/a/36017067/217408 中所示的组件,那么您需要动态的东西。

    【讨论】:

    • 很好的答案,谢谢冈特!添加包含一个与另一个的包大小差异也很好,因为我听说平台浏览器动态会为最终包大小添加更多 kb。
    • 我认为关于术语的答案有点过时了。但基本上对于动态组件,您需要一些在运行时编译组件的编译器,这当然会增加包的大小。如果您不使用动态组件,则所有内容都必须静态编译,但不需要将组件编译器添加到包中。动态组件是您在运行时生成组件模板的组件(字符串连接,从其他服务器下载,...),然后将其编译为可以添加到视图中的 Angular 组件。
    【解决方案3】:

    如果您仔细查看 angular2 的历史,您会发现有两个版本 1) beta 版本 2) 发布候选版本。目前是 r.c 3(候选版本 3)。发布候选版本是指最终版本之前的错误修复版本。因此,当 angular2 从 beta 版本移动到第一个候选版本(rc1)时,它会进行一些目录更改......例如

    angular2/core---->@angular/core
    angular2/platform/browser------>@angular/platform-browser-dynamic
    

    我在这里添加一个斯内普

    更多信息请访问

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

    我希望你能找到答案。谢谢

    【讨论】:

    • 虽然历史很有趣,但该答案的文本并未解决所提出的问题,并且它错误地暗示 angular2/platform/browser 项目已重命名为 @angular/platform-b​​rowser-dynamic ,正如@user2227400 指出的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2017-07-02
    • 2019-04-01
    相关资源
    最近更新 更多