Angular ng build --watch 似乎在 Angular 版本 11 中被破坏了

Posted

技术标签:

【中文标题】Angular ng build --watch 似乎在 Angular 版本 11 中被破坏了【英文标题】:Angular ng build --watch seems to be broken in angular version 11 【发布时间】:2021-07-05 12:41:13 【问题描述】:

在开发 Angular 库期间,我使用 ng build <lib> --watch 即时构建库。根据官方 Angular 文档进行设置:https://angular.io/guide/creating-libraries 我正在使用npm link 将库符号链接到我的项目中。我的 Angular 11 项目是使用 Ivy 编译器编译的。我的库正在使用 View Engine 编译器。 ng serve 命令使用 ngcc 将 Ivy 特定的附加功能添加到库中(dist 中的构建工件)

但是,这种方法不再适用于新的 Angular 11 项目。每当 watcher 重建库时,ng serve 服务的应用程序就会丢失轨道,需要重新启动。

我尝试将 angular 降级到 10.x 并同步库和应用程序项目中的 typescript 编译器版本。

重启项目的ng serve会导致:Tried to overwrite *.component.d.ts.__ivy_ngcc_bak with an ngcc back up file, which is disallowed.一直。在这种情况下,唯一有帮助的是重新启动 ng build <lib> --watch 进程。

在我看来,Ivy 的边缘状态已经彻底破坏了使用 npm link 的库开发体验。

有没有人知道 Angular 11 中的哪些变化导致了这个问题?

【问题讨论】:

添加 out 参数可能是一个修复它。 ng build --watch -o dist/。试一试吧!谢谢你:) 似乎 -o (--output-path) 是最近才添加的。我的库项目仍然是 angular-cli 版本 10.2.3,不幸的是不支持 -o 标志。 【参考方案1】:

我遇到了一个不错的解决方案,它不适用于 Angular 11,但是,在降级到 Angular 10 之后,它可以工作。这个想法是向库中添加一个额外的构建配置,以便在 Ivy 模式下进行编译。甚至ng build <lib> --watch 也可以使用这种方法。

这里描述了解决方案:https://github.com/angular/angular/issues/33395#issuecomment-693306453

【讨论】:

以上是关于Angular ng build --watch 似乎在 Angular 版本 11 中被破坏了的主要内容,如果未能解决你的问题,请参考以下文章

手动重启 `ng build --watch` 或 `ng serve`

Angular $scope.$watch 用于仅从表单更改的变量(ng-model 指令)

如果存在编译错误,ng build --watch 不会输出 dist 目录

为啥 Angular 8 CircleCI 构建在执行 ng test --watch-false 时失败,业力配置为 singleRun=true?

配置 angular cli build watch 模式和 nodemon watch 的最佳方法是啥?

在 ng build angular 中运行严格编译