Description
🚀 Feature request
Command (mark with an x
)
- new
- build
- serve
- test
- e2e
- generate
- add
- update
- lint
- extract-i18n
- run
- config
- help
- version
- doc
Description
Currently executing ng update
will perform necessary migrations from one angular version to another which works smoothly.
However there there are two issues I see:
- Users can't select / see the available migrations with their details before executing
ng update
- Optional migrations that may be available won't be executed and listed. In fact users that doesn't know about such probably very helpful but optional migrations aren't able to find and execute them.
One example for this which can be found at update.angular.io only when selecting 'medium' or 'advanced' option:
ng update @angular/cli@12 --migrate-only production-by-default
Identifying and executing such optional migrations can be tricky if there isn't a way to list/select them.
Describe the solution you'd like
Ideally during the execution, ng update
should list the migrations with their default execution state and also include all available optional migrations with a non-preselected state like this:
> ng update
Which migrations do you want to execute:
[x] migration1Name: migration1Description
[x] migration2Name: migration1Description
[ ] optionalMigration1Name: optionalMigration1Description
After a user made the selection, all selected migrations will be executed including the selected optional ones.
This will cause a better developer experience as it's more clear what will happen during the update process before actually running the migrations.
It should be considered, that tools like renovate or dependabot can't handle such interactive selections.
Therefore a flag could be helpful to deactivate the prompt and switch back to the current behavior (only executing the pre-selected non-optional migrations):
ng update --interactive=false
As users may have already executed migrations previously or want to know what migrations are available at another point of time, a separate migration command/option could be helpful:
> ng update --list-migrations
- migration1Name: migration1Description
- migration2Name: migration1Description
- optionalMigration1Name: optionalMigration1Description
To execute a migration run: ng update --migrate-only <migration-name>
Describe alternatives you've considered
An alternative would be to implement a "small" solution that would at least list possible optional migrations at the end of the ng update
log to give users a hint about possibly further migration they can execute manually
> ng update
...
Further optional migrations are available:
- migration1Name: migration1Description
- migration2Name: migration1Description
- optionalMigration1Name: optionalMigration1Description
To execute a migration run: ng update --migrate-only <migration-name>