Running `ng version` outside an Angular project has confusing output
- 主要言語
- TypeScript
- スター
- 27k
- フォーク
- 11.8k
- 平均マージ
- 14時間 23分
- マージ済み PR(30日)
- 162
説明
# 🐞 Bug report
### Command
- [X] update
- [X] version
### Is this a regression?
No
### Description
I have a monorepo where I am adding an Angular project. As a result, it exists in a subdirectory. Since many tools (such as `ng`) expect the project to be the working directory, I often use the pattern `(cd path/to/subproject/ && run some tool)`. The subshell means I'm returned back to my original directory.
This pattern does not play well with `ng version` and `ng update`. I was trying to update to version 9 prerelease and saw the following:
```shell
$ (cd services/ng-frontend/ && ng update @angular/cli @angular/core --next)
# Successful update...
$ ng version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 8.3.21
Node: 13.5.0
OS: linux x64
Angular:
...
Package Version
------------------------------------------------------
@angular-devkit/architect 0.803.21
@angular-devkit/core 8.3.21
@angular-devkit/schematics 8.3.21
@schematics/angular 8.3.21
@schematics/update 0.803.21
rxjs 6.4.0
```
This was confusing and made me think the update failed, however the update was actually fine. My mistake here was running `ng version` in the root of my monorepo, rather than the Angular project. After noticing this I tried:
```shell
$ (cd services/ng-frontend/ && ng version)
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 9.0.0-rc.7
Node: 13.5.0
OS: linux x64
Angular: 9.0.0-rc.7
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Ivy Workspace: Yes
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.900.0-rc.7
@angular-devkit/build-angular 0.900.0-rc.7
@angular-devkit/build-optimizer 0.900.0-rc.7
@angular-devkit/build-webpack 0.900.0-rc.7
@angular-devkit/core 9.0.0-rc.7
@angular-devkit/schematics 9.0.0-rc.7
@ngtools/webpack 9.0.0-rc.7
@schematics/angular 9.0.0-rc.7
@schematics/update 0.900.0-rc.7
rxjs 6.5.4
typescript 3.6.4
webpack 4.41.2
```
Which is what I expected post-update.
IMHO this dichotomy is confusing. When the user is in an Angular project, it lists versions of that project. When outside an Angular project, it lists the global versions and it is very easy to look at the wrong one.
I'm not sure what the ideal solution to this problem would be. There could be two different commands, such as an `ng global-version` and `ng project-version`, but this might add too much additional complexity to be worth it. Maybe the output could simply be updated to be more clear? Such as having some big red text saying "No Angular project detected at $PWD"?
コントリビューションガイド
調査の方向性
issue にある 2 つの `ng version` コマンドを `services/ng-frontend/` の内外でそれぞれ再現し、Angular CLI のバージョンコマンドのエントリーポイントを追跡します。Angular プロジェクトの外部での出力が、プロジェクトが検出されなかったことを明確に示し、グローバルバージョンをプロジェクトのバージョンのように見せないようになれば、変更は完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- angular, typescript
- 領域
- cli
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100