angular / angular/angular-cli

Support resolving architect builders relative to project

未关闭
#20,453 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area: @angular/cli feature feature: insufficient votes
主要语言
TypeScript
星标
27k
派生
11.8k
平均合并
14 小时 23 分钟
30 天内合并 PR
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 依赖,而不要求这些依赖位于 repository 根目录。

由索引模型根据 Issue 内容生成。

评估

技术栈
angular, typescript
领域
build-system, cli
Issue 类型
功能
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。