Angular12'ngserve'构建应用程序的速度很慢,几乎就像生产构建一样
我刚刚将一个应用程序从 Angular 11.2.7 迁移到 Angular 12。一切运行良好,除了当我开发和使用“ng serve”时,重建时间现在要慢得多,以至于令人沮丧。
我在 M1 iMac 上,使用节点 16.1.0,这是值得的。
在我转向 Angular 12 之前,机器在开发重建(亚秒级)时闪电般快速。现在如果我只更改一行代码,即使我只更改控制台日志中的一个字母,构建时间为 23 秒,大约 22其中的几秒钟被“阶段:密封”占用。
我还注意到,即使在 ng 服务时,现在一切都从缩小的“main.js”运行。我似乎记得版本 11 没有这样做,但在开发过程中运行了单个未缩小的组件。也就是说,ng每次我更改任何内容时,服务现在似乎都在做一些完整的生产构建。我认为这是缓慢的根本原因,但我不确定。
所以 。. .
在 Angular 12 中,我还应该使用 'ng serve' 进行开发吗?
迁移时是否需要设置一个选项,也许是关闭完全缩小的重建,以保持旧的构建速度?
无论如何,这个“密封阶段”是什么?对我来说,这听起来像是一个生产构建术语!
谢谢
约翰
回答
angular cli 更新为 v12,使开发环境更像生产环境。
或者他们喜欢这样称呼它:
这些更改的目的是降低配置复杂性并支持新的“默认生产构建”计划。
根据他们的变化来看,您应该更新您的angular.json并更新projects.{PROJECT_NAME}.architect.build.defaultConfiguration路径:
"defaultConfiguration": "development"
在这里阅读更多
如果您没有使用该ng update命令,而是使用 手动更新npm,则需要运行迁移。具体来说,材料样式发生了一些变化,如果不迁移,可能会导致构建时间过长。要触发这些迁移,请运行:
ng update @angular/cli --migrate-only --from 11 --to 12
- I took your answer as the starting point and did this: created a brand new Angular 12 app, diffed angular.json in the migrated app against angular.json in the new app (there are a lot of differences, too many to mention here!) and brought the migrated app into line with the new app. It is now super fast again. Thanks!
回答
如果你手动复制过的点点滴滴,从一个干净angular.json(你绝对应该这样做),请确保您不会错过"defaultConfiguration": "development"下serve。
我以前的 angular.json 没有这个,坦率地说,这可能是我的错误 - 或者它可能是事后出现的一个功能。我仍在进行生产构建,这非常令人沮丧,因为它需要 3 分钟,而且没有任何东西告诉您它正在执行哪个构建。
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"browserTarget": "angular12:build:production"
},
"development": {
"browserTarget": "angular12:build:development"
}
},
"defaultConfiguration": "development"
},
在以下情况下,您会知道您有一个开发版本:
- 在浏览器 devtools 中查看源代码不会在一行中显示您的代码和注释。
- Lazy Chunk Files 有很长的文件名,比如
default-src_app_common-crm_common-crm_module_ts.js和不34.js
另外,我个人选择关闭sourceMap. 它使我的编译速度更快,如果我真的需要它,我可以随时启用它。
很重要:
如果您多次运行迁移,则迁移似乎存在“类似错误的行为”。如果aot设置当前为 true,则迁移将删除它(因为默认值为 true,所以它是多余的)。但是,如果您再次运行它(缺少 aot 设置),那么它将被写入false并有效禁用(因为它认为您正在从 11 迁移,其中 absense 意味着 false 并且它认为您希望它保持为 false)。
ng update @angular/cli --migrate-only --from 11 --to 12
所以运行迁移实际上可以给人一种加快构建速度的错觉,但实际上它实际上只是禁用了 aot。
换句话说,如果您已经运行ng update并仔细查看您的angular.json文件,请不要运行它。
- With that said I'm still seeing builds taking almost 3 times as long as before. It might just be webpack 5 but if that's the case they urgently need to find a workaround because this just isn't going to work for me.
回答
我必须将以下内容添加到我的配置中。我的新应用程序似乎没有任何“开发”配置。
在 angular.json
"configurations": {
"development": {
"optimization": false,
"outputHashing": "all",
"sourceMap": true,
"namedChunks": true,
"extractLicenses": false,
"vendorChunk": true,
"buildOptimizer": false,
"budgets": []
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "ui:build"
},
"configurations": {
"development": {
"browserTarget": "ui:build:development"
}
},
"defaultConfiguration": "development"
}