GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — tsconfig paths and module resolution errors in VS Code · Issue #8138 · angular/angular-cli

tsconfig paths and module resolution errors in VS Code #8138

New issue
Copy link
New issue
Copy link
Closed
#17586
Closed
tsconfig paths and module resolution errors in VS Code#8138
#17586
Copy link
Assignees
alan-agius4
Labels
area: @schematics/angularfreq2: mediumseverity2: inconvenienttype: RFC / discussion / questiontype: bug/fix
Milestone
Backlog

Description

@SpiraMira
SpiraMira
opened on Oct 21, 2017
Issue body actions

Bug Report or Feature Request (mark with an x)

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

Versions.

@angular/cli: 1.4.9
node: 7.9.0
os: darwin x64
@angular/animations: 4.4.5
@angular/common: 4.4.5
@angular/compiler: 4.4.5
@angular/core: 4.4.5
@angular/forms: 4.4.5
@angular/http: 4.4.5
@angular/platform-browser: 4.4.5
@angular/platform-browser-dynamic: 4.4.5
@angular/router: 4.4.5
@angular/cli: 1.4.9
@angular/compiler-cli: 4.4.5
typescript: 2.3.4

macOS Sierra 10.12.6
VS Code 1.17.2

Repro steps.

My tsconfig path property seems broken.
When I replace my path mapped imports (@shared, @assets etc.) with the equivalent coded relative paths, typescript module resolution seems to work (vs code intellisense is happy)
I have a large angular 2 project and am used to aliasing my asset and shared directories this way.
NOTE: project builds and (seems) to run just fine
This has been reported often, but I can't make sense of the current state of this issue.
This more than annoying as VS Code reports Angular spurious errors on all of my components.
I also suspect this is why I get the infamous Can't read property isSkipSelf of null when I open my templates (html) in VS Code.
I was running 1.4.2 and just tried ~1.4.2, which resolves to 1.4.9 in my package.json, to no avail.
Will 1.5.x fix this?
How can I help debug this without providing a copy of my app?

Thanks in advance. Regards.

The log given by the failure.

Desired functionality.

Mention any other details that might be useful.

Reacted by Tom Seldon, Jay C., Syed Ali Taqi, Yurii Haideichuk, Omar El Halabi, David Fallah, Pablo Reyes, Alex Rapley, Khaled Triek, Sebastian Langer and 29 more
Reacted by Jason Foglia and Vincent

Activity

Next
  1. filipesilva
    assigned
    hansl
    on Oct 25, 2017
  2. filipesilva
    added
    needs: repro stepsWe cannot reproduce the issue with the information givenWe cannot reproduce the issue with the information given
    on Oct 25, 2017
  3. filipesilva commented on Oct 25, 2017

    @filipesilva
    filipesilva
    on Oct 25, 2017
    Contributor
    More actions

    Can you setup a minimal repro please? You can read here why this is needed. A good way to make a minimal repro is to create a new app via ng new repro-app and adding the minimum possible code to show the problem. Then you can push this repository to github and link it here.

  4. ThomasBeavers commented on Nov 18, 2017

    @ThomasBeavers
    ThomasBeavers
    on Nov 18, 2017
    More actions

    I am not the OP, but here is a sample repo showing a component imported via the path alias displaying the "Cannot find module" error in vscode, but successfully building with npm run build --prod.

    https://github.com/Veabers/tsconfig-paths-repro-app

  5. sandangel commented on Nov 19, 2017

    @sandangel
    sandangel
    on Nov 19, 2017
    More actions

    vscode seem to only look into nearest tsconfig.json file, while angular read your tsconfig.app.json You should add relative path config to both tsconfig.json and tsconfig.app.json.

    Reacted by maiasmith, Fan Li, Jonathan Sant, Joar K. Mauseth, Bruno Brito, Himanshu Satija, Ofirmgr, polypus74, James Scharett, Hervé and 9 more
  6. mehs2690 commented on Jan 13, 2018

    @mehs2690
    mehs2690
    on Jan 13, 2018
    More actions

    Hi @sandangel ,
    I hope you are well, I followed the advice you gave to add the alias settings in both the tsconfig.json and the tsconfig.app.json, but when I'm writing the import statement I get the following:

    pathsaliases

    I know that this is not a priority, but I am worried when it is very possible that my application grows severely in subfolders and reaches a tedious depth of escirbir.

  7. sandangel commented on Jan 13, 2018

    @sandangel
    sandangel
    on Jan 13, 2018
    More actions

    @mehs2690 can you type environment in editor ( don't add import statement yet ) and then press Ctrl + . when cursor in environment to see what option vscode suggest? Remember that because tsconfig.json and tsconfig.json has different baseUrl so you have to align path config accordingly

    here is my config:
    tsconfig.json

    "baseUrl": "./",
        "paths": {
          "@app/*": ["src/app/*"],
          "@env/*": ["src/environments/*"],
          "@views/*": ["src/app/views/*"]
        }

    tsconfig.app.json

    {
      "extends": "../tsconfig.json",
      "compilerOptions": {
        "outDir": "../out-tsc/app",
        "baseUrl": "./",
        "module": "es2015",
        "types": [],
        "paths": {
          "@app/*": ["app/*"],
          "@env/*": ["environments/*"],
          "@views/*": ["app/views/*"]
        }
      },
      "exclude": ["test.ts", "**/*.spec.ts"],
      "angularCompilerOptions": {
        "annotationsAs": "static fields",
        "annotateForClosureCompiler": true,
        "preserveWhitespaces": false,
        "fullTemplateTypeCheck": true
      }
    }
    
    Reacted by Familusi Babatunde, nfourre, Simon Rothert, Jonathan Sant, Vijay Sarathy, lululuffy, Nenad, xaun, Yonny Vizcaya, jesusvallez and 23 more
    Reacted by Familusi Babatunde, nfourre, Simon Rothert, Asif Rahman, Jonathan Sant, jesusvallez, rip3rs, oskrb22, jbgtmartin, Dariusz Filipiak and 6 more
    Reacted by Syed Ali Taqi, Rahul Vagadiya, Simon Rothert, Jonathan Sant, jesusvallez, Dariusz Filipiak, Kate Dainovich, Afif Fikani, Vahid Mohammadi, Belal Al Mazlom and 2 more
    Reacted by Dariusz Filipiak and Etzael Henaro Sánchez
  8. mehs2690 commented on Jan 13, 2018

    @mehs2690
    mehs2690
    on Jan 13, 2018
    More actions

    @sandangel I have configured both the tsconfig.json and the tsconfig.app.json as you suggested, I wrote in the editor environment and got this:

    notloadpaths

  9. sandangel commented on Jan 13, 2018

    @sandangel
    sandangel
    on Jan 13, 2018
    More actions

    can you try with Typescript Hero plugin?
    here is my screenshot
    screenshot from 2018-01-13 14 08 55

    Reacted by Etzael Henaro Sánchez, Josue Teixeira and Tomasz Morawski
    Reacted by amiceli, Etzael Henaro Sánchez and Tomasz Morawski
  10. mehs2690 commented on Jan 13, 2018

    @mehs2690
    mehs2690
    on Jan 13, 2018
    More actions

    Thank you very much @sandangel ! with the Plugin of Typescript Hero it already detects the paths and it does not mark error in vscode. I tried compiling (ng build) and there was no error, I tried in prod mode and an error came out (ng build --prod) ERROR in ./src/main.ts
    Module not found: Error: Can not resolve './$$_gendir/app/app.module.ngfactory', lastly I tried running (ng build --prod --aot = false) and everything went fine. but for the moment I can continue to develop with the help you gave me. regards

  11. fxck commented on Jan 15, 2018

    @fxck
    fxck
    on Jan 15, 2018
    More actions

    Having problems as well. It does compile fine, but vscode cannot find it.

    Reacted by zhaowenjian, Terrence and Shankar Regmi
  12. mehs2690 commented on Jan 15, 2018

    @mehs2690
    mehs2690
    on Jan 15, 2018
    More actions

    @fxck, Have you already tried installing the Plugin of Typescript Hero? also, it happens to me that you have to reopen the vscode so that the changes take them into account.

  13. Roaders commented on Feb 1, 2018

    @Roaders
    Roaders
    on Feb 1, 2018
    More actions

    I am having this issue as well and I am unable to install Typescript Hero as access is restricted from where I work.

    For me I only get the issue in test specs.

    In app.module.ts this is fine:

    import { AppRoutingModule } from '@app';
    import { AppComponent } from '@app';
    import { SharedModule } from '@shared';
    

    but in app.component.spec.ts I get the error here:

    import { AppComponent } from '@app';
    

    [ts] Cannot find module '@app'.

    I have 3 tsconfig files:

    tsconfig.json in src:

    {
        "extends": "../tsconfig.json",
        "compilerOptions": {
            "outDir": "../out-tsc/app"
        },
        "exclude": [
            "test.ts",
            "**/*.spec.ts"
        ]
    }
    

    tsconfig.spec.json in src:

    {
      "extends": "../tsconfig.json",
      "compilerOptions": {
        "outDir": "../out-tsc/spec",
        "types": [
          "jasmine",
          "node"
        ]
      },
      "files": [
        "test.ts"
      ],
      "include": [
        "**/*.spec.ts",
        "**/*.d.ts"
      ]
    }
    

    and tsconfig.json in root:

    {
        "compilerOptions": {
            "baseUrl": "src",
            "paths": {
                "@app": [
                    "app/"
                ],
                "@ui": [
                    "app/ui/"
                ],
                "@shared": [
                    "app/modules/shared/"
                ]
            }
        }
    }
    

    When I am in app.module.ts and I do > Typescript: Go to project configuration I get taken to src/tsconfig.json. When I am in app.component.spec.ts and do the same I get a message saying Files in not part of a TypeScript project. When I go to configure tsconfig.json I get taken to the tsconfig.json in the root of the project.

    This seems to be more of a VSCode issue than an angular issue so I will post this as an issue in VSCode.

    Reacted by Marko Kajzer, Reto Ryter, Ryan Voronyak, zhaowenjian, Filip Michalski and Doug
    Reacted by Adebayo Akinlaja and paulbanwart
  14. hansl
    removed their assignment
    on Feb 6, 2018
  15. filipesilva
    added
    comp: cli/build
    on Feb 14, 2018
  16. 37 remaining items

  17. lifenstein commented on Feb 15, 2019

    @lifenstein
    lifenstein
    on Feb 15, 2019
    More actions

    I was having troubles with absolute and relative URLs myself; ended up following instructions at https://hackernoon.com/react-pro-tip-use-absolute-imports-for-better-readability-and-easy-refactoring-2ad5c7f2f957 which completely fixed the issues.

    TL;DR:
    Make a .env file in project root and add this:
    NODE_PATH=src/

    Then make a jsonconfig.json file in project root and add this:

    {
      "compilerOptions": {
        "baseUrl": "src"
      }
    }
    

    I'm actually in a React codebase and don't even use typescript in it, yet setting the "javascript.implicitProjectConfig.checkJs": true in my vscode settings gives me all the intellisense I need with just these two changes!

  18. ruojianll commented on Feb 15, 2019

    @ruojianll
    ruojianll
    on Feb 15, 2019
    More actions

    There are many folders in my VSCode workspace inspector, and VSCode may only use the first folder's tsconfig.json. If your tsconfig.json is not in the first folder, drag the folder to the first and try it again, it worked for me.

    So one project one workspace and place the configure folder at first place.

    Reacted by ncking
  19. dagatsoin commented on Feb 18, 2019

    @dagatsoin
    dagatsoin
    on Feb 18, 2019
    More actions

    As there is no clear solution, I will past my working one:

    folders:
    -root
    -tsconfig.json #the package config
    --src #the source of my package
    --demo
    --tsconfig.json #the storybook config referencing my upper module as "@sproutch/ui"

    Important note

    I had to remove "rootDir": "src", from the root package config to make it work.

    Here are the full files.

    Package config

    {
      "compilerOptions": {
        "allowSyntheticDefaultImports": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "forceConsistentCasingInFileNames": true,
        "jsx": "react",
        "lib": ["es2017", "dom"],
        "module": "commonjs",
        "declaration": true,
        "moduleResolution": "node",
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noUnusedParameters": true,
        "outDir": "lib",
        "preserveConstEnums": true,
        "skipLibCheck": true,
        "sourceMap": true,
        "strictNullChecks": true,
        "suppressImplicitAnyIndexErrors": true,
        "target": "es5",
        "types": ["node", "react", "react-dom", "react-native"]
      },
      "include": [
        "src/**/*"
      ],
      "exclude": [
        "build",
        "node_modules",
        "jest.config.js",
        "App.js",
        "babel.config.js",
        "metro.config.js"
      ],
      "compileOnSave": false
    }

    Storybook subfolder config

    {
      "compilerOptions": {
        "allowJs": true,
        "allowSyntheticDefaultImports": true,
        "baseUrl": "../",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "forceConsistentCasingInFileNames": true,
        "jsx": "react",
        "lib": ["es2017", "dom"],
        "module": "commonjs",
        "moduleResolution": "node",
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noUnusedLocals": false,
        "noUnusedParameters": false,
        "outDir": "lib",
        "paths": {
          "@sproutch/ui": ["./src"]
        },
        "preserveConstEnums": true,
        "skipLibCheck": true,
        "sourceMap": true,
        "strictNullChecks": true,
        "suppressImplicitAnyIndexErrors": true,
        "target": "es5",
        "types": ["node", "react", "react-dom", "react-native"]
      },
      "include": [
        "./stories/**/*",
      ],
      "exclude": [
        "./stories/**/*native*",
      ]
    }
  20. smaranh commented on Jan 17, 2020

    @smaranh
    smaranh
    on Jan 17, 2020
    More actions

    Here is how I fixed it, turns out it is a problem with VSCode. Sometimes changes to tsconfig are not reflected in the IntelliSense. I closed VSCode and made sure no VSCode process was running. They reopened VSCode and Voila! IntelliSense now detects the @ 😩

    Reacted by Ritesh Kumar, Max and Boo
  21. filipesilva commented on Mar 30, 2020

    @filipesilva
    filipesilva
    on Mar 30, 2020
    Contributor
    More actions

    microsoft/TypeScript#37239 might help with this. It's described in https://devblogs.microsoft.com/typescript/announcing-typescript-3-9-beta/ as follows:

    Support for “Solution Style” tsconfig.json Files
    ...
    This file that really does nothing but manage other project files is often called a “solution” in some environments. Here, none of these tsconfig.*.json files get picked up by the server, but we’d really like the language server to understand that the current .ts file probably belonds to one of the mentioned projects in this root tsconfig.json.

    TypeScript 3.9 adds support to editing scenarios for this configuration. For more details, take a look at the pull request that added this functionality.

  22. filipesilva
    added
    needs: discussionOn the agenda for team meeting to determine next stepsOn the agenda for team meeting to determine next steps
    on Mar 30, 2020
  23. dgp1130
    assigned
    alan-agius4
    on Apr 9, 2020
  24. dgp1130
    removed
    needs: discussionOn the agenda for team meeting to determine next stepsOn the agenda for team meeting to determine next steps
    on Apr 9, 2020
  25. dgp1130 commented on Apr 9, 2020

    @dgp1130
    dgp1130
    on Apr 9, 2020
    Collaborator
    More actions

    Discussed this in a meeting earlier and tsconfig "solutions" can be a great answer to this problem. We'll do some more investigation to see exactly how this can work and what release we can fit it into.

    Reacted by José Miguel Ochoa
  26. alan-agius4 commented on Apr 13, 2020

    @alan-agius4
    alan-agius4
    on Apr 13, 2020
    Collaborator
    More actions

    Being tracked internal TOOL-1368

  27. mgechev
    closed this as completedin #17586on May 20, 2020
  28. mgechev
    added a commit that references this issue on May 20, 2020

    feat(@schematics/angular): add solutions style tsconfig structure

    This issue will close once commit bede232 is merged into the 'main' branch.
    bede232
  29. angular-automatic-lock-bot commented on Jun 20, 2020

    @angular-automatic-lock-bot
    angular-automatic-lock-botBot
    on Jun 20, 2020
    More actions

    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.

  30. angular-automatic-lock-bot
    locked and limited conversation to collaborators on Jun 20, 2020
  31. mostafaibr
    added a commit that references this issue on May 29, 2026

    feat(@schematics/angular): add solutions style tsconfig structure

    This issue will close once commit 56c0084 is merged into the 'master' branch.
    56c0084
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

  • @alan-agius4
    alan-agius4

Labels

area: @schematics/angularfreq2: mediumseverity2: inconvenienttype: RFC / discussion / questiontype: bug/fix

Type

No type

Projects

No projects

    Milestone

    • BacklogNo due date

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    You are visitor 01402503 — GeezerVison does not store the pages you look up.
    Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.