angular / angular/angular-cli

Library schematic does not support path property

Open
#16,080 6 comments 9 reactions 0 assignees View on GitHub
area: @schematics/angular feature feature: insufficient votes
Dominant language
TypeScript
Stars
27k
Forks
11.8k
Avg merge
14h 23m
Merged PRs (30d)
162

Description

# 🐞 Bug report

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

```
- [ ] new
- [ ] build
- [ ] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [ ] update
- [ ] lint
- [ ] xi18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc
- [X] schematics
```

### Is this a regression?

Not as far as I know

### Description

I tried to create a schematic that generates an application and adds a library to it. However, the library schematic does not accept a `path` as parameter and it then attempts to create the library in the folder that contains the application. Specifically, it tries to read the `angular.json` file from the folder containing the application folder (e.g. the folder where the schematic is run).

Note that I expected the `path` property to work, as it's included with most of the other Angular schematics, for example component, module and service.

## 🔬 Minimal Reproduction

A minimal reproduction may be found [in this repo](https://github.com/CobusKruger/AngularProjectMergeIssues).

It also addresses a problem I had when trying to work around this with `applyToSubtree`.

Here is the simplest description I could come up with.

Given this factory:

```typescript
export function createProject(_options: any): Rule {
return (_tree: Tree, _context: SchematicContext) => {
return chain([
externalSchematic('@schematics/angular', 'ng-new', optionsNew),
externalSchematic('@schematics/angular', 'library', optionsLib)
]);
};
}
```

If you execute the schematic in a folder named `/parent/folder` and the app generates in a new folder named app (`/parent/folder/app`), the library schematic searches for the `angular.json` in `/parent/folder` instead of `/parent/folder/app`.

## 🔥 Exception or Error
```
An error occured:
Error: Unable to locate a workspace file for workspace path.
at Object.readWorkspace (C:\dev\scratchpad\scaffolding-tests\node_modules\@angular-devkit\core\src\workspace\core.js:74:19)
at async Object.getWorkspace (C:\dev\scratchpad\scaffolding-tests\node_modules\@schematics\angular\utility\workspace.js:51:27)
at async C:\dev\scratchpad\scaffolding-tests\node_modules\@schematics\angular\library\index.js:153:27
```

## 🌍 Your Environment



_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/

Angular CLI: 8.3.1
Node: 12.12.0
OS: win32 x64
Angular: undefined
...

Package Version
------------------------------------------------------
@angular-devkit/architect 0.803.1 (cli-only)
@angular-devkit/core 8.3.17
@angular-devkit/schematics 8.3.17
@schematics/angular 8.3.1 (cli-only)
@schematics/update 0.803.1 (cli-only)
rxjs 6.4.0
typescript 3.5.3

## Similar issues
https://github.com/angular/angular-cli/issues/17598

Contributor guide

Open the contributing guide

Research direction

Start with the minimal reproduction repository linked in the issue and trace the library schematic entry point at @schematics/angular/library/index.js, along with utility/workspace.js from the error stack. Confirm how the path is handled when the application is generated in a subfolder. Done means the library schematic accepts the path and locates the generated application's angular.json without the workspace error.

Written by the indexing model from the issue text.

Assessment

Tech stack
angular, typescript
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.