Skip to content

Ng Generator does not always save components in correct directory #7377

Closed

Description

@chriscurnow

like #6431

Bug Report or Feature Request (mark with an x)

- [x] bug report -> please search issues before submitting
- [ ] feature request

Versions.

@angular/cli: 1.2.7
node: 6.10.1
os: darwin x64
@angular/animations: 4.3.3
@angular/cdk: 2.0.0-beta.8
@angular/common: 4.3.3
@angular/compiler: 4.3.3
@angular/core: 4.3.3
@angular/flex-layout: 2.0.0-beta.8
@angular/forms: 4.3.3
@angular/http: 4.3.3
@angular/material: 2.0.0-beta.8
@angular/platform-browser: 4.3.3
@angular/platform-browser-dynamic: 4.3.3
@angular/router: 4.3.3
@angular/cli: 1.2.7
@angular/compiler-cli: 4.3.3

Mac OS Sierra

Repro steps.

It's hard to give repo steps because I haven't discovered exactly what I have to do to reproduce.
However, once the behaviour starts for a project, it continues to behave this way. The only way I have found to fix it is to start a completely new project and copy all my code over.

The issue is well described in #6431.
In brief,

  1. I cd to a module directory in my project eg: app/admin

  2. I create a new component, eg ng g c users

Instead of creating the new component inside app/admin/users, it creates it inside app, eg app/users

In addition it creates an incorrect import statement in app.module, eg:
import { UsersComponent } from './admin/src/app/users/users.component';

I have seen this happen twice now. I can be working with a project for months and months with it working correctly, then one day it just stops working the way it should. The only way I have been able to fix it is to generate a completely new project and copy all my code over to the new project.

The log given by the failure.

N/A

Desired functionality.

It should create the component inside the admin directory, eg:
app/admin/users

and it should create a well formed import statement in admin.module, eg:
import { UsersComponent } from './users/users.component';

Mention any other details that might be useful.

When I create a brand new project it does what I want it to. I have no idea what I do to provoke this behaviour. I have gone through the following files with a fine tooth comb and can't find anything wrong:

  • .angular-cli.json
  • package.json
  • tsconfig.json
  • src/tsconfig.app.json

I can't think of anywhere else to look.

Activity

  1. exequiel09 commented on Aug 14, 2017

    @exequiel09

    For the wrong import path, Issue #7135 and Pull Requests #7284 and #7090 are related here. Already reported since versions 1.2.x. This is just a duplicate of an existing issue. Fixes and new implementation are already on progress being done by @Brocco

  2. grizzm0 commented on Aug 14, 2017

    @grizzm0
    Contributor

    The reason it doesn't work as intended is because you're using cd. Use ng in the root of your project and it'll work as intended.

    Run the following from the root: ng g c admin/users

  3. exequiel09 commented on Aug 14, 2017

    @exequiel09

    @grizzm0 Yes it will work on the root of the project. But what if you have complex directory structure inside the src/app directory? It should be automatically done by the CLI tool itself to correctly resolve the path. This was a regression appeared on what i don't know version.

  4. grizzm0 commented on Aug 14, 2017

    @grizzm0
    Contributor

    @exequiel09 I was simply explaining why the error happens and how he can solve it for now. :) This is how ng is supposed to be used. From the looks of the other issues it seems like it'll be "fixed" tho.

    I don't see what a complex folder structure has to do with anything other than auto-completing with tab in the terminal.

  5. chriscurnow commented on Aug 14, 2017

    @chriscurnow
    Author

    @grizzm0 this is not how Ng is supposed to work. For the last several months it has worked as I wanted it to in my project. If I start a brand new project, it works how I want it to.
    What I don't understand here is why it just starts happening after it has been working perfectly for months on end.
    In terms of a complex folder structure, try writing
    ng g c contract/subcontract/subcontract-new/supplier-select/new-supplier/new-supplier-with-name/new-supplier-result
    I know at least one developer who discarded angular in favour of react on the basis of this issue alone.

  6. chriscurnow commented on Aug 16, 2017

    @chriscurnow
    Author

    @exequiel09 the issue I am having is actually not the same as #7135.

    I am finding it does create the wrong path in app.module but not in the same format as above.

    I could actually live with this behaviour although it would be annoying.

    The bigger issue is that it creates the component in the wrong directory as described above. This is killing me as it used to work and I'm not sure why it stopped.

  7. krimple commented on Aug 28, 2017

    @krimple

    We just ran into the src in path thing... Now, I've NEVER used ng generate outside of the root directory, and I've ALWAYS used directory paths. Such as:

    ng new foobar
    ng g module blah
    ng g component blah/blah-blah --module blah
    

    All works, directories are good.

    It won't find the module blah when generating the component unless you tell it to create the module in blah/ and refer to the module with its name blah...

    Sorry for the blathering on, with the blah blah and all.

    Bottom line, if you then start doing cd into directories, it's not a good thing, it'll try relative pathing but then put src/app in there and screw it up.

    Is this new? I dunno. But that's the behavior I see.

  8. chriscurnow commented on Oct 4, 2017

    @chriscurnow
    Author

    Any update on this issue?

  9. chriscurnow commented on Nov 23, 2017

    @chriscurnow
    Author

    We'd really like to know how you are going with this issue. When we are working on a complex app it would make it so much easier.

    We all know some things can be really difficult to achieve but it was marked as urgent on 24 August.

    Any sort of update would be much appreciated.

  10. zladuric commented on Dec 15, 2017

    @zladuric

    FWIW: for me the path is duplicated. OS: Win 10, node 8.9.2, ng-cli: 1.6.0:

    [duricz@msgn07241 ~/temp/my-new-app]$ ng g m new-module
      create src/main/frontend/src/main/frontend/app/new-module/new-module.module.ts (193 bytes)
    [duricz@msgn07241 ~/temp/my-new-app]$
    

    FWIW my root path in .angular-cli.json is set to src/main/frontend;

  11. 5 remaining items

  12. added and removed
    P1Impacts a large percentage of users; if a workaround exists it is partial or overly painful
    on Feb 6, 2018
  13. chriscurnow commented on Feb 6, 2018

    @chriscurnow
    Author

    @hansl just interested. What's the priority on this issue now?

  14. hansl commented on Feb 7, 2018

    @hansl
    Contributor

    @chriscurnow Priority is now based differently, so we don't put it ourselves anymore. Since @Brocco is assigned to your issue we'll get to it soon.

  15. chriscurnow commented on Feb 7, 2018

    @chriscurnow
    Author

    @hansl Thanks 😄

  16. chriscurnow commented on May 22, 2018

    @chriscurnow
    Author

    @hansl :
    It's now May 2018. I reported this in August 2017. Last update here was Feb this year. In Feb you said you would get to it soon.
    Look I know the CLI team has been working hard and has made some fantastic additions and fixed up a lot of stuff. I'm not complaining but it would be nice to have some sort of update now and again 😄

  17. chriscurnow commented on Jul 9, 2018

    @chriscurnow
    Author

    @hansl @filipesilva @Brocco It looks like this has been fixed. I haven't tested all use cases but I just tried it out the other day and everything worked as expected. I can't tell which version because I just haven't tried again until just recently.

  18. angular-automatic-lock-bot commented on Sep 8, 2019

    @angular-automatic-lock-bot

    This issue has been automatically locked due to inactivity.
    Please file a new issue if you are encountering a similar or related problem.

    Read more about our automatic conversation locking policy.

    This action has been performed automatically by a bot.

  19. locked and limited conversation to collaborators on Sep 8, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions