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?