angular / angular/angular-cli

Support resolving architect builders relative to project

オープン
#20,453 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
area: @angular/cli feature feature: insufficient votes
主要言語
TypeScript
スター
27k
フォーク
11.8k
平均マージ
14時間 23分
マージ済み PR(30日)
162

説明

# 🚀 Feature request

### Command (mark with an `x`)

- [ ] new
- [x] build
- [x] serve
- [x] test
- [x] e2e
- [ ] generate
- [ ] add
- [ ] update
- [x] lint
- [x] extract-i18n
- [x] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

### Description

Schematics are loaded relative to the project first, and if the collection isn't found in the project then it's resolved in the folder the `angular.json` is in. This is great because it allows for situations where multiple versions of a collection are in use, or for collections that require peer dependencies.

The same behaviour is currently not present in architect builders. Those are only resolved in the folder the angular.json file is in, making certain situations impossible.

A very specific case: I've got a repository that contains tooling, and I'm using typescript 4.2 for this repo. I'm using the angular CLI to configure the projects in the repo, with a homebrew architect builder to create npm packages to run in node.
Now I want to add an angular application to the repo to test packages in the repo, as the tool in question is `@ngx-playwright/jest`, meant for using Jest and Playwright to run e2e tests.
However, building the angular app only works if I install `@angular-devkit/build-angular` in the root package.json file, which requires `@angular/compiler-cli`, `@angular/compiler`, `@angular/core`, `rxjs` and `zone.js` as well. It also requires `typscript@>= 4.0 < 4.2` which clashes with the 4.2.3 that I'm using throughout the repo.

Note: I'm using a package manager that doesn't hoist dependencies (i.e. the behaviour of yarn 2's pnp linker or pnpm)

### Describe the solution you'd like

I'd like to be able to install `@angular-devkit/build-angular` in the test application's folder instead of the repo root. This package.json already contains all necessary peer dependencies and it can use 4.1 without me having to downgrade typescript throughout the entire repo.

### Describe alternatives you've considered

- Use a package manager that hoists dependencies. This allows for installing the `@angular-devkit/build-angular` package in the test app's folder while it'll still end up in the root `node_modules` so the angular CLI can find it. It will still find the wrong version of typescript though, so I'm still stuck.
- Downgrade my repo to typescript 4.1: this might be possible, but it feels very wrong that the one angular app in the repo should define the typescript version being used to build the node packages throughout the entire repo as well as the typescript language server version used by VS Code.
- Create a separate `angular.json` in the test app's folder. This is the solution I'm going for, but if I have multiple `angular.json` files I'm losing a lot of the ergonomics the angular CLI normally offers.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

まず、angular.json で参照されている Architect builder がどのように解決されるかを追跡し、その動作を、説明されているプロジェクト相対の schematic 解決と比較します。ルートの package.json とテストアプリケーションの package.json を確認し、続いて build、serve、test、e2e、lint、extract-i18n、run が、リポジトリのルートに依存関係を要求せずにプロジェクトの builder 依存関係を使用できることを検証します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
angular, typescript
領域
build-system, cli
issue の種類
機能追加
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。