ng build和ngc之间的关系和区别是什么

时间:2017-06-20 02:09:06

标签: angular typescript

我知道这个问题令人困惑,因为它让我困惑了一段时间。 以前我认为ngc只是另一个tsc,它编译ts到js。 ng build是一个一体化的命令,可以同时执行ngc工作,捆绑和部署已编译的js脚本(如webpack)。 但现在我很困惑,因为我看到ng new的示例项目有以下脚本

“build:prod”:“ng build --prod&& ngc”

这个脚本让我感到很困惑,我真的很想知道ng build和ngc做了什么,以及为什么我们都需要这两个。

我是anggular 4和前端开发的新手,非常感谢你对这个帖子发表评论。

3 个答案:

答案 0 :(得分:1)

忽略示例项目,您对ngc的原始理解为tsc replacement for Angular applications is correct

此外,如果您使用的是ng build --prod命令,则默认使用AOT编译,这就是使用ngc工具的原因。

答案 1 :(得分:1)

ngc是安装角度编译器时可用的命令。它的目的是将您的角度代码(包括模板和css)编译到TypeScript中。通过这种方式编译,您可以运行像Rollup之类的东西,在“树抖动”之后创建一个包,这是删除死代码并因此生成一个较小的文件的过程。

您可以通过angular cli获得 ng build,并做一些不同的事情。它将为您创建捆绑包并为您创建分发文件夹,其中包括部署到Web服务器所需的所有文件。它甚至通过添加脚本来加载由构建创建的包来修改index.html。

这两篇文章对我有助于理解ngc的目的。

http://blog.mgechev.com/2016/06/26/tree-shaking-angular2-production-build-rollup-javascript/

http://www.gistia.com/angular-performance-two-strategies/

答案 2 :(得分:0)

Angular正在使用两种类型的编译器,即JIT和AOT。 当您使用ng serve和ng build命令运行用于运行和构建应用程序的默认命令时,它将利用JIT(Just in Time)编译器。

另一方面,当您使用ngc命令时,它会使用(AOT)Ahead of Time编译器,该编译器在实际加载到浏览器之前实际进行编译和构建代码。