angular-cli: Generated angular.json file does not correctly lower case the application name
š Bug report
Command (mark with an x
)
- [x ] new
- build
- serve
- test
- e2e
- generate
- add
- update
- lint
- xi18n
- run
- config
- help
- version
- doc
Is this a regression?
Iām not certain whether this is a regression. I donāt recall seeing the issue. No one had reported it to me previously. But that doesnāt mean it didnāt exist.
Description
When you create a new Angular project using ng new
with an upper case or mixed case name, the Angular CLI correctly converts the name to lower case for the keys in the package.json file. It does not convert the name to lower case for the keys in the angular.json file. See the āMinimal Reproductionā for screen shots.
š¬ Minimal Reproduction
ng new Hello-World
Resulting package.json file correctly lower cases the project name:
Resulting angular.json file does not lower case the project name, resulting in an error (see below):
Notice the resulting error:
š„ Exception or Error
Property Hello-World is not allowed
š Your Environment
Angular CLI: 9.1.3
Node: 12.16.1
OS: win32 x64
Angular: 9.1.4
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Ivy Workspace: Yes
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.901.3
@angular-devkit/build-angular 0.901.3
@angular-devkit/build-optimizer 0.901.3
@angular-devkit/build-webpack 0.901.3
@angular-devkit/core 9.1.3
@angular-devkit/schematics 9.1.3
@angular/cli 9.1.3
@ngtools/webpack 9.1.3
@schematics/angular 9.1.3
@schematics/update 0.901.3
rxjs 6.5.5
typescript 3.8.3
webpack 4.42.0
Anything else relevant?
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Reactions: 1
- Comments: 18 (11 by maintainers)
Commits related to this issue
- fix(@angular/cli): replace regex with correct project name validation Closes #17579 — committed to Jefiozie/angular-cli by Jefiozie 4 years ago
- fix(@angular/cli): replace regex with correct project name validation Closes #17579 — committed to Jefiozie/angular-cli by Jefiozie 4 years ago
- fix(@angular/cli): replace regex with correct project name validation Closes #17579 — committed to angular/angular-cli by Jefiozie 4 years ago
- fix(@angular/cli): replace regex with correct project name validation Closes #17579 — committed to angular/angular-cli by Jefiozie 4 years ago
I am claiming this issue. I have started to work on the fix.
Thank you.
Iād like to see #2 as it is more friendly for beginners and for those used to being able to use mixed case project names as they can now.
Two alternatives for more consistent behavior would be:
The second alternative would be more implicit, but also less surprising for folks used to the partial name transform we do right now only for the package name.
@Jefiozie, project names are valid both in camel case or kebeb case. Therefore weād need to update the above mention RegeExp.
When it comes to project directories, I am inclined towards always dasherizing the project folder name to align with other schematics where the folder name is always dasherized, that being said Itās not a biggy, as long as the schema validation is fixed.
This is so also personal preference, I always use kebab casing when it comes to file and directory naming.
Hi all,
Hello-World
is a perfectly valid project name. The problem here is that the schema used by the IDE is not accounting for this. https://github.com/angular/angular-cli/blob/a98c71dbf241499532c49216795c13d40c92015b/packages/angular/cli/lib/config/schema.json#L30The above schema also doesnāt account for other valid project names such as
@foo/bar
.The above doesnāt match the actual RegExp used to valid project names https://github.com/angular/angular-cli/blob/a98c71dbf241499532c49216795c13d40c92015b/packages/schematics/angular/utility/validation.ts#L33
Also there seems to be a misalignment between the library and application schematic, where the library folder is always dasherized, while in the application itās not.
@Splaktar Thank you for the pointers. I am leveraging
strings.dasherize()
method to transformoptions.name
as lower casing the name wont be sufficed as camelcase is not supported as well. This will match the name as same as inpackage.json
.In addition to the change in
schematics/angular/application/index.ts
i was validating if the name transformation needs to be applied for the corresponding individual rulesng-new
,app-shell
etc. Which i have not found the answers why i should not make the changes in rules.The application schematic adds the project to the workspace using
options.name
https://github.com/angular/angular-cli/blob/1d2e7bba07e1477fe3a551314ab93ad7aaa63420/packages/schematics/angular/application/index.ts#L290-L294Thereās a
validateProjectName()
function, but it doesnāt change the name.You may want to apply the appropriate string transform function to
options.name
just aftervalidateProjectName()
is called in the default function sinceoptions.name
feeds into so many other configurations.