angular / angular/angular-cli

ng add fails to find app.module.ts when using custom tsconfig.json paths

Aberta
#12,740 11 comentários 12 reações 0 responsáveis Ver no GitHub
area: @schematics/angular freq1: low severity3: broken type: bug/fix
Linguagem predominante
TypeScript
Estrelas
27k
Forks
11.8k
Merge médio
14h 23min
PRs com merge (30d)
162

Descrição

### Bug Report or Feature Request (mark with an `x`)
```
- [X ] bug report -> please search issues before submitting
- [X ] feature request
```
Whether this is a bug or a feature depends on whether or not custom `paths` in `tsconfig.json` are supported with the Cli.

### Command (mark with an `x`)
```
- [X ] add
```

### Versions
Angular CLI: 7.0.2
Node: 10.8.0
OS: win32 x64
Angular: 7.0.0
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

### Repro steps
- `ng new app-name` (pick defaults)
- Add `"paths": { "@app/*": ["src/app/*"] }` to `tsconfig.json`
- Update `main.ts` to use this new path
`import { AppModule } from '@app/app.module';`
`import { environment } from './environments/environment';`
- `ng add @angular/material`
- Select `Yes` for `? Set up browser animations for Angular Material?`

Repository all set up to reproduce this error is available [here](https://github.com/seangwright/ng-cli-add-error-with-tsconfig-paths).
Just clone and type `ng add @angular/material`.

### The log given by the failure
`Could not read Angular module file: /src/@app/app.module.ts`

### Desired functionality
Cli handles custom paths in `tsconfig.json`.

### Mention any other details that might be useful
Here is where material tries to get the `app.module.ts` path
https://github.com/angular/material2/blob/985774a4eaa14d1dcbf1ad96ab176043d38f433e/src/lib/schematics/ng-add/setup-project.ts#L56

Here is where the path to `app.module.ts` is being calculated in the schematics code
https://github.com/angular/angular-cli/blob/82f2bda2f59e4665611d1a75b51a62bae21ac340/packages/schematics/angular/utility/ng-ast-utils.ts#L78

I believe the above link is what is causing the problem.

I've always preferred absolute urls in Angular apps compared to the relative paths (which become very difficult to read for nested components).

Adding custom `paths` to `tsconfig.json` works pretty well to solve this problem. VSCode works fine with it and the Cli has no other issues I've run into.

If using `paths` isn't officially supported does the Angular team recommend using relative paths like `import { MyApiService } from '../../../../../my-api.service'`?

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece por packages/schematics/angular/utility/ng-ast-utils.ts e, em seguida, compare como o setup-project.ts do material2 consome o caminho calculado de app.module.ts. Reproduza a falha com o repositório vinculado executando ng add @angular/material após configurar os caminhos de tsconfig.json. Está concluído quando o comando localiza o módulo com sucesso quando main.ts o importa por meio de @app/app.module.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
angular, typescript
Domínio
cli, tooling
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.