Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Angular 9 (Ivy) App build with local library (mono-repo) failing #36386

Closed
1 of 15 tasks
michaelfaith opened this issue Apr 1, 2020 · 38 comments
Closed
1 of 15 tasks

Angular 9 (Ivy) App build with local library (mono-repo) failing #36386

michaelfaith opened this issue Apr 1, 2020 · 38 comments
Labels
needs reproduction This issue needs a reproduction in order for the team to investigate further
Milestone

Comments

@michaelfaith
Copy link

🐞 Bug report

Command (mark with an x)

  • new
  • build
  • serve
  • test
  • e2e
  • generate
  • add
  • update
  • lint
  • xi18n
  • run
  • config
  • help
  • version
  • doc

Is this a regression?

Haven't tested in older version, so i'm unsure, but considering that this is Ivy related, i would imagine it is regression.

Description

I have an Angular 9 app that i'm starting to move some of the components into a dedicated library project, which uses secondary entry points (trying to mimic Angular Material's approach). Everything builds fine if i build both library and app with the Ivy compiler, but if i build both with the --prod flag (which causes the library to be built without Ivy), the app build fails with the following error:

Compiling @fabric/components/breadcrumbs : es2015 as esm2015

ERROR in node_modules/@fabric/components/breadcrumbs/fab-breadcrumbs.module.d.ts:1:22 - error NG6002: Appears in the NgModule.imports of AppModule, but could not be resolved to an NgModule class.

This likely means that the library (@fabric/components/breadcrumbs) which declares FabBreadcrumbsModule has not been processed correctly by ngcc, or is not compatible with Angular Ivy. Check if a newer version of the library is available, and update if s
o. Also consider checking with the library's authors to see if the library is expected to be compatible with Ivy.

1 export declare class FabBreadcrumbsModule {
                       ~~~~~~~~~~~~~~~~~~~~

I tried updating to the latest version (9.0.2 -> 9.1.0), but it's still doing the same thing. I tried recreating this with a brand new super simple mono-repo project, but in that simple case it works fine. I compared the tsconfig and angular.json config files between my app and the simple working app, but they're fairly identical. As a last resort, i added "postinstall": "ngcc" to my root package.json, wiped out my library's folder in my node_modules dir, and re-ran npm install. This forced ngcc to run on everything including my library. After that, the app build worked as it should. So it would seem that the app build isn't recognizing that the library build was done with viewEngine and kicking off the ngcc itself?

🔥 Exception or Error


Compiling @fabric/components/breadcrumbs : es2015 as esm2015

ERROR in node_modules/@fabric/components/breadcrumbs/fab-breadcrumbs.module.d.ts:1:22 - error NG6002: Appears in the NgModule.imports of AppModule, but could not be resolved to an NgModule class.

This likely means that the library (@fabric/components/breadcrumbs) which declares FabBreadcrumbsModule has not been processed correctly by ngcc, or is not compatible with Angular Ivy. Check if a newer version of the library is available, and update if s
o. Also consider checking with the library's authors to see if the library is expected to be compatible with Ivy.

1 export declare class FabBreadcrumbsModule {
                       ~~~~~~~~~~~~~~~~~~~~

🌍 Your Environment



Angular CLI: 9.1.0
Node: 12.13.0
OS: win32 x64

Angular: 9.1.0
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, localize, platform-browser
... platform-browser-dynamic, router
Ivy Workspace: Yes

Package                            Version
------------------------------------------------------------
@angular-devkit/architect          0.901.0
@angular-devkit/build-angular      0.901.0
@angular-devkit/build-ng-packagr   0.901.0
@angular-devkit/build-optimizer    0.901.0
@angular-devkit/build-webpack      0.901.0
@angular-devkit/core               9.1.0
@angular-devkit/schematics         9.1.0
@angular/cdk                       9.2.0
@angular/material                  9.2.0
@ngtools/webpack                   9.1.0
@schematics/angular                9.1.0
@schematics/update                 0.901.0
ng-packagr                         9.1.0
rxjs                               6.5.4
typescript                         3.8.3
webpack                            4.42.0

Anything else relevant?

@michaelfaith michaelfaith changed the title Angular CLI 9 (Ivy) App build with local library (mono-repo) failing Angular 9 (Ivy) App build with local library (mono-repo) failing Apr 1, 2020
@alan-agius4 alan-agius4 transferred this issue from angular/angular-cli Apr 2, 2020
@ngbot ngbot bot added this to the needsTriage milestone Apr 2, 2020
@petebacondarwin
Copy link
Member

Where is the @fabric/components/breadcrumbs distributable stored? I assume it is something like path/to/project/dist/components/breadcrumbs?

What is in the @fabric/components folder? Is that an entry-point too or just a containing folder for the breadcrumbs secondary entry-point?

Can you try processing the libraries directly using ngcc (running from your project root):

ngcc -l debug -s dist -p es2015

@michaelfaith
Copy link
Author

michaelfaith commented Apr 2, 2020

@petebacondarwin thanks for the quick reply. Really appreciate the help.
The lib project's build destination is a folder within the root dist folder: ./dist/fabric-components That was the default setup when generating the library via the cli. I changed the tsconfig to alias it to @fabric/components (and updated the lib's package.json name as the same).
From root tsconfig:

  "paths": {
      "@fabric/components": [
        "dist/fabric-components/fabric-components",
        "dist/fabric-components"
      ]
    }

The projects/fabric-components folder has an entry point with just export default {};. From my readings, it seemed necessary to have that top level entry point, even if i was only going to use secondary entry points. My lib folder structure looks like this:

fabric-components
    │   index.ts
    │   karma.conf.js
    │   ng-package.json
    │   package.json
    │   README.md
    │   test.ts
    │   theme.scss
    │   tsconfig.lib.json
    │   tsconfig.lib.prod.json
    │   tsconfig.spec.json
    │   tslint.json
    │
    ├───breadcrumbs
    │       fab-breadcrumbs.component.html
    │       fab-breadcrumbs.component.scss
    │       fab-breadcrumbs.component.spec.ts
    │       fab-breadcrumbs.component.ts
    │       fab-breadcrumbs.module.ts
    │       index.ts
    │       ng-package.json
    │       public-api.ts
    │       README.md
    │
    ├───shared-config
    │       fab-nav-config.ts
    │       index.ts
    │       ng-package.json
    │       public-api.ts
    │
    ├───styles
    │       colors.scss
    │       fabric-kendo-overrides.scss
    │       fabric-kendo-theme.scss
    │       fabric-material-overrides.scss
    │       fabric-material-theme.scss
    │       sizes.scss
    │
    └───utilities
            fab-utilities.spec.ts
            fab-utilities.ts
            index.ts
            ng-package.json
            public-api.ts

The fab-utilities is just a collection of reusable functions that i have a dedicated endpoint for. They're used in both the app and within the breadcrumbs. And that seems to compile fine in all cases. shared-config just has some shared configuration types, that i'll be adding more to as i move more components over. breadcrumbs currently has the only actual module, as it was my first component to shift over. The index.ts for each just exports everything in the adjacent public-api. Each ng-package just points at the adjacent index as entry point.

Here's the output from the ngcc command. Looks like it's reporting invalid entry-point for breadcrumbs:

Debug: Forking unlocker child-process
Debug: Attemping to write lock-file at <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 36868
Debug: Written lock-file at <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 36868
Debug: Running ngcc on ClusterExecutor (using 7 worker processes).
Debug: Analyzing entry-points...
Debug: No manifest found for <user-dir>/src/fabric/ui/dist so walking the directories for entry-points.
Debug: Walking directories took 0s.
Debug: Invalid entry-point <user-dir>/src/fabric/ui/dist/fabric-components/breadcrumbs. It is missing required dependencies:
 - @fabric/components/shared-config
 - @fabric/components/utilities
Debug: Analyzed 3 entry-points in 0.1s. (Total tasks: 3)
Debug: Processing tasks...
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: No assignments for 1 idle (out of 4 total) workers. Busy workers: 1, 2, 3
Debug: Forking unlocker child-process
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components, formatProperty: es2015, processDts: true}
Debug: Forking unlocker child-process
Debug: [Worker #2] Processing task: {entryPoint: @fabric/components/shared-config, formatProperty: es2015, processDts: true}
Debug: Forking unlocker child-process
Debug: Forking unlocker child-process
Debug: [Worker #3] Processing task: {entryPoint: @fabric/components/utilities, formatProperty: es2015, processDts: true}
Compiling @fabric/components : es2015 as esm2015
Debug:   Successfully compiled @fabric/components : es2015
Debug: No assignments for 2 idle (out of 4 total) workers. Busy workers: 2, 3
Compiling @fabric/components/utilities : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/utilities : es2015
Debug: No assignments for 3 idle (out of 4 total) workers. Busy workers: 2
Compiling @fabric/components/shared-config : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/shared-config : es2015
Debug: Processed tasks in 5.2s.
Debug: Stopping 4 workers...
Debug: Attempting to remove lock-file at <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: PIDs match (36868), so removing <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: Run ngcc in 6s.

My understanding was that we should use package references like that for imports to other internal classes, rather than relative path imports.

@andreialecu
Copy link
Contributor

I wonder if this commit might help: 995cd15

You can test it by updating the dep to:

    "@angular/compiler-cli": "https://664062-24195339-gh.circle-artifacts.com/0/angular/compiler-cli-pr36249-b4e8b3545e.tgz",

@michaelfaith
Copy link
Author

@andreialecu I tried using that compiler-cli, but it immediately throws this error:

Error: ENOTEMPTY: directory not empty, rmdir '<user-dir>/src/fabric/ui/node_modules/@angular/core/__ivy_ngcc__'
    at Object.rmdirSync (fs.js:752:3)
    at rmkidsSync (<user-dir>\src\fabric\ui\node_modules\fs-extra\lib\remove\rimraf.js:304:27)
    at rmdirSync (<user-dir>\src\fabric\ui\node_modules\fs-extra\lib\remove\rimraf.js:281:7)
    at Object.rimrafSync [as removeSync] (<user-dir>\src\fabric\ui\node_modules\fs-extra\lib\remove\rimraf.js:252:7)
    at NodeJSFileSystem.removeDeep (<user-dir>\src\fabric\ui\node_modules\@angular\compiler-cli\src\ngtsc\file_system\src\node_js_file_system.js:57:75)
    at CachedFileSystem.removeDeep (<user-dir>\src\fabric\ui\node_modules\@angular\compiler-cli\src\ngtsc\file_system\src\cached_file_system.js:96:27)
    at NgccDirectoryCleaner.clean (<user-dir>\src\fabric\ui\node_modules\@angular\compiler-cli\ngcc\src\writing\cleaning\cleaning_strategies.js:54:85)
    at PackageCleaner.clean (<user-dir>\src\fabric\ui\node_modules\@angular\compiler-cli\ngcc\src\writing\cleaning\package_cleaner.js:44:41)
    at Object.cleanOutdatedPackages (<user-dir>\src\fabric\ui\node_modules\@angular\compiler-cli\ngcc\src\writing\cleaning\package_cleaner.js:111:25)
    at analyzeEntryPoints (<user-dir>\src\fabric\ui\node_modules\@angular\compiler-cli\ngcc\src\main.js:103:45)

Do i need to delete all of the @angular dependencies from node_modules and re-install?

@michaelfaith
Copy link
Author

michaelfaith commented Apr 3, 2020

Ok, i wiped out the @angular folder from node_modules, re-installed, and tried the build again. It basically behaved the same as originally: it recompiled all of the library modules including @fabric/components/shared-config and @fabric/components/utilities, but when it hit the breadcrumbs, it gave the same error as my original post.

@michaelfaith
Copy link
Author

It does look like ngcc had success with breadcrumbs this time when i manually run the ngcc command @petebacondarwin gave me earlier. However, during the regular ng build (without forcing the ngcc as a postinstall step) it's failiing.

Debug: Forking unlocker child-process
Debug: Attemping to write lock-file at <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 36880
Debug: Written lock-file at <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 36880
Debug: Running ngcc on ClusterExecutor (using 7 worker processes).
Debug: Analyzing entry-points...
Debug: No manifest found for <user-dir>/src/fabric/ui/dist so walking the directories for entry-points.
Debug: Walking directories took 0s.
Debug: Analyzed 4 entry-points in 0.1s. (Total tasks: 4)
Debug: Processing tasks...
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: No assignments for 1 idle (out of 4 total) workers. Busy workers: 1, 2, 3
Debug: Forking unlocker child-process
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components/shared-config, formatProperty: es2015, processDts: true}
Debug: Forking unlocker child-process
Debug: [Worker #2] Processing task: {entryPoint: @fabric/components/utilities, formatProperty: es2015, processDts: true}
Debug: Forking unlocker child-process
Debug: [Worker #3] Processing task: {entryPoint: @fabric/components, formatProperty: es2015, processDts: true}
Debug: Forking unlocker child-process
Compiling @fabric/components/utilities : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/utilities : es2015
Debug: No assignments for 2 idle (out of 4 total) workers. Busy workers: 1, 3
Compiling @fabric/components : es2015 as esm2015
Debug:   Successfully compiled @fabric/components : es2015
Debug: No assignments for 3 idle (out of 4 total) workers. Busy workers: 1
Compiling @fabric/components/shared-config : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/shared-config : es2015
Debug: No assignments for 3 idle (out of 4 total) workers. Busy workers: 1
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components/breadcrumbs, formatProperty: es2015, processDts: true}
Compiling @fabric/components/breadcrumbs : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/breadcrumbs : es2015
Debug: Processed tasks in 6.3s.
Debug: Stopping 4 workers...
Debug: Attempting to remove lock-file at <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: PIDs match (36880), so removing <user-dir>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: Run ngcc in 7s.

@petebacondarwin
Copy link
Member

@michaelfaith - I am sorry I have not replied sooner. Did you ever get this working? We have rolled out a number of improvements to ngcc over the last month or two.
If you still have a problem would you be able to provide a reproduction, perhaps a small repository that I can clone and debug?

@petebacondarwin petebacondarwin added needs reproduction This issue needs a reproduction in order for the team to investigate further triage #1 labels May 24, 2020
@michaelfaith
Copy link
Author

@petebacondarwin thanks for getting back. I haven't retried it since adding ngcc as postinstall step for the work around. I can try updating to the latest, removing that, and retrying.

@michaelfaith
Copy link
Author

@petebacondarwin I updated my project to 9.1.9 and 9.1.7 of core and cli respectively, as well as 9.1.5 of ng-packagr, and it's still happening. It's basically throwing an error for every component/endpoint in the library (except, interestingly, the one component that has an svg template instead of html...).

When i first posted this, i tried to recreate it in a small simple mono-repo, with secondary endpoints, but wasn't able to with the simple setup. Many of my components use exported functions or model objects from another endpoint, and i don't think my simple test had that. But some of the components that are failing, don't reference outside of their endpoint, so i'm not sure that that's the defining factor either. I can try to recreate it again in a small simple starter app, but is there anything else that might be helpful i can try within my main project to identify possible root cause?

@petebacondarwin
Copy link
Member

That would be great! As you can imagine blind-remote-debugging is really hard 😸

@michaelfaith
Copy link
Author

Definitely understand. I tried all morning to recreate this in the little test app i created when i tried the first time. I added two additional endpoints, one for common model and one for reusable functions. Used both in a component in the same library but different endpoints. Used the function in the app too. Added a shared stylesheet that both the library component and app use. Added Angular Material since we're using that pretty heavily. Just trying to emulate the basic usage pattern from our main app as best i can. But alas, no luck so far. Seems to handle it just fine. I'm kind of running out of ideas, since this seems to mirror our approach at a basic level.

@petebacondarwin
Copy link
Member

I'm sorry @michaelfaith, without a reproduction it is basically impossible for us to resolve your issue. Closing this issue for now. If you come up with a way for me to help, please post here and I will re-open.

@michaelfaith
Copy link
Author

michaelfaith commented Jul 7, 2020

I'm sorry @michaelfaith, without a reproduction it is basically impossible for us to resolve your issue. Closing this issue for now. If you come up with a way for me to help, please post here and I will re-open.

@petebacondarwin After updating to v10, I'm having even more issues, with ngcc not even working now on the --prod built library. I re-ran the debug command you gave, and it seems to be tripping up on endpoints that depend on other endpoints?

Debug: Forking unlocker child-process
Debug: Attemping to write lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 25236
Debug: Written lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 25236
Debug: Running ngcc on ClusterExecutor (using 7 worker processes).
Debug: Analyzing entry-points...
Debug: No manifest found for C:/Users/<username>/src/fabric/ui/dist so walking the directories for entry-points.
Debug: Walking C:/Users/<username>/src/fabric/ui/dist for entry-points took 0.5s.
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/breadcrumbs. It is missing required dependencies:
 - @fabric/components/common
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/column-configuration-dialog. It is missing required dependencies:
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/header. It is missing required dependencies:
 - @fabric/components/logo
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/header-actions. It is missing required dependencies:
 - @fabric/components/utilities
 - @fabric/components/common
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/multiselect. It is missing required dependencies:
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/sidenav. It is missing required dependencies:
 - @fabric/components/common
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components/under-construction. It is missing required dependencies:
 - @fabric/components/common
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/breadcrumbs. It is missing required dependencies:
 - @fabric/components/common
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/column-configuration-dialog. It is missing required dependencies:
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/header. It is missing required dependencies:
 - @fabric/components/logo
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/header-actions. It is missing required dependencies:
 - @fabric/components/utilities
 - @fabric/components/common
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/multiselect. It is missing required dependencies:
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/sidenav. It is missing required dependencies:
 - @fabric/components/common
 - @fabric/components/utilities
Debug: Invalid entry-point C:/Users/<username>/src/fabric/ui/dist/fabric-components (prod-pre-compile)/under-construction. It is missing required dependencies:
 - @fabric/components/common
Debug: Analyzed 14 entry-points in 0.5s. (Total tasks: 14)
Debug: Starting unlocker at process 9308 on behalf of process 25236
Debug: The lock-file path is C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__
Debug: Processing tasks...
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components, formatProperty: es2015, processDts: true}
Compiling @fabric/components : es2015 as esm2015
Debug: [Worker #2] Processing task: {entryPoint: @fabric/components/common, formatProperty: es2015, processDts: true}
Compiling @fabric/components/common : es2015 as esm2015
Debug: [Worker #4] Processing task: {entryPoint: @fabric/components/logo, formatProperty: es2015, processDts: true}
Compiling @fabric/components/logo : es2015 as esm2015
Debug: [Worker #3] Processing task: {entryPoint: @fabric/components/confirmation-dialog, formatProperty: es2015, processDts: true}
Compiling @fabric/components/confirmation-dialog : es2015 as esm2015
Debug: [Worker #5] Processing task: {entryPoint: @fabric/components/loading-spinner, formatProperty: es2015, processDts: true}
Compiling @fabric/components/loading-spinner : es2015 as esm2015
Debug: [Worker #6] Processing task: {entryPoint: @fabric/components/message, formatProperty: es2015, processDts: true}
Compiling @fabric/components/message : es2015 as esm2015
Debug: [Worker #7] Processing task: {entryPoint: @fabric/components/utilities, formatProperty: es2015, processDts: true}
Compiling @fabric/components/utilities : es2015 as esm2015
Debug:   Successfully compiled @fabric/components : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components, formatProperty: es2015, processDts: true}
Compiling @fabric/components : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/utilities : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #7] Processing task: {entryPoint: @fabric/components/common, formatProperty: es2015, processDts: true}
Compiling @fabric/components/common : es2015 as esm2015
Debug:   Successfully compiled @fabric/components : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components/confirmation-dialog, formatProperty: es2015, processDts: true}
Compiling @fabric/components/confirmation-dialog : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/common : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #2] Processing task: {entryPoint: @fabric/components/logo, formatProperty: es2015, processDts: true}
Compiling @fabric/components/logo : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/loading-spinner : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #5] Processing task: {entryPoint: @fabric/components/loading-spinner, formatProperty: es2015, processDts: true}
Compiling @fabric/components/loading-spinner : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/logo : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #4] Processing task: {entryPoint: @fabric/components/message, formatProperty: es2015, processDts: true}
Compiling @fabric/components/message : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/common : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #7] Processing task: {entryPoint: @fabric/components/utilities, formatProperty: es2015, processDts: true}
Compiling @fabric/components/utilities : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/confirmation-dialog : es2015
Debug: No assignments for 1 idle (out of 7 total) workers. Busy workers: 1, 2, 4, 5, 6, 7
Debug:   Successfully compiled @fabric/components/logo : es2015
Debug: No assignments for 2 idle (out of 7 total) workers. Busy workers: 1, 4, 5, 6, 7
Debug:   Successfully compiled @fabric/components/message : es2015
Debug: No assignments for 3 idle (out of 7 total) workers. Busy workers: 1, 4, 5, 7
Debug:   Successfully compiled @fabric/components/loading-spinner : es2015
Debug: No assignments for 4 idle (out of 7 total) workers. Busy workers: 1, 4, 7
Debug:   Successfully compiled @fabric/components/utilities : es2015
Debug: No assignments for 5 idle (out of 7 total) workers. Busy workers: 1, 4
Debug:   Successfully compiled @fabric/components/confirmation-dialog : es2015
Debug: No assignments for 6 idle (out of 7 total) workers. Busy workers: 4
Debug:   Successfully compiled @fabric/components/message : es2015
Debug: Processed tasks in 14.4s.
Debug: Stopping 7 workers...
Debug: Attempting to remove lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: PIDs match (25236), so removing C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: Run ngcc in 15s.
Debug: Attempting to remove lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: The lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ was already removed.

You can see that the two that it keeps complaining about (common and utilities) compile fine later. So it's like the compiler isn't figuring out the correct order to process the endpoints?

It's still the case that if i build the lib with Ivy and run the local app with Ivy, it works. But building the lib with the prod flag and running the local app with Ivy is not really feasible anymore, even with the ngcc postinstall, which solved it with v9.

@petebacondarwin
Copy link
Member

Have you changed your tsconfig.json setup? What is in your "paths" in tsconfig.json?
It is hard to tell but I think that ngcc is not able to find these local libraries (@fabric/common/..., etc) as depedencies because it doesn't know how to map to them...

@michaelfaith
Copy link
Author

Have you changed your tsconfig.json setup? What is in your "paths" in tsconfig.json?
It is hard to tell but I think that ngcc is not able to find these local libraries (@fabric/common/..., etc) as depedencies because it doesn't know how to map to them...

I added this to the tsconfig.base, which both the app and lib tsconfigs extend:

"paths": {
      "@fabric/components/*": [
        "./dist/fabric-components/*"
      ]
    }

I've tested building with the --prod flag and publishing, then pulling in via npm, and that all works great. It's just the local builds of the app if the lib is built with --prod that's failing like this.

@petebacondarwin
Copy link
Member

Can you try adding --tsconfig tsconfig.app.json or similar to your ngcc run?

@michaelfaith
Copy link
Author

Can you try adding --tsconfig tsconfig.app.json or similar to your ngcc run?

@petebacondarwin Using the app one didn't seem to produce any different results, but when i used the tsconfig.lib.json from the library folder, that one seemed to process everything correctly, and my app ng build worked afterwards. So that's quite interesting, what could that mean?

C:\Users\<username>\src\fabric\ui>ngcc -l debug -s dist -p es2015 --tsconfig ./projects/fabric-components/tsconfig.lib.json
Debug: Forking unlocker child-process
Debug: Attemping to write lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 30480
Debug: Written lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ with PID 30480
Debug: Running ngcc on ClusterExecutor (using 7 worker processes).
Debug: Analyzing entry-points...
Debug: No manifest found for C:/Users/<username>/src/fabric/ui/dist so walking the directories for entry-points.
Debug: Walking C:/Users/<username>/src/fabric/ui/dist for entry-points took 0.3s.
Debug: Analyzed 14 entry-points in 0.3s. (Total tasks: 14)
Debug: Processing tasks...
Debug: Spawning another worker process as there is more work to be done.
Debug: Starting unlocker at process 42540 on behalf of process 30480
Debug: The lock-file path is C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: Spawning another worker process as there is more work to be done.
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components/utilities, formatProperty: es2015, processDts: true}
Compiling @fabric/components/utilities : es2015 as esm2015
Debug: [Worker #2] Processing task: {entryPoint: @fabric/components/common, formatProperty: es2015, processDts: true}
Compiling @fabric/components/common : es2015 as esm2015
Debug: [Worker #3] Processing task: {entryPoint: @fabric/components/logo, formatProperty: es2015, processDts: true}
Compiling @fabric/components/logo : es2015 as esm2015
Debug: [Worker #4] Processing task: {entryPoint: @fabric/components, formatProperty: es2015, processDts: true}
Compiling @fabric/components : es2015 as esm2015
Debug: [Worker #5] Processing task: {entryPoint: @fabric/components/confirmation-dialog, formatProperty: es2015, processDts: true}
Compiling @fabric/components/confirmation-dialog : es2015 as esm2015
Debug: [Worker #6] Processing task: {entryPoint: @fabric/components/loading-spinner, formatProperty: es2015, processDts: true}
Compiling @fabric/components/loading-spinner : es2015 as esm2015
Debug: [Worker #7] Processing task: {entryPoint: @fabric/components/message, formatProperty: es2015, processDts: true}
Compiling @fabric/components/message : es2015 as esm2015
Debug:   Successfully compiled @fabric/components : es2015
Debug: No assignments for 1 idle (out of 7 total) workers. Busy workers: 1, 2, 3, 5, 6, 7
Debug:   Successfully compiled @fabric/components/utilities : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #4] Processing task: {entryPoint: @fabric/components/multiselect, formatProperty: es2015, processDts: true}
Debug: [Worker #1] Processing task: {entryPoint: @fabric/components/column-configuration-dialog, formatProperty: es2015, processDts: true}
Compiling @fabric/components/multiselect : es2015 as esm2015
Compiling @fabric/components/column-configuration-dialog : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/logo : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #3] Processing task: {entryPoint: @fabric/components/header, formatProperty: es2015, processDts: true}
Compiling @fabric/components/header : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/loading-spinner : es2015
Debug: No assignments for 1 idle (out of 7 total) workers. Busy workers: 1, 2, 3, 4, 5, 7
Debug:   Successfully compiled @fabric/components/common : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #6] Processing task: {entryPoint: @fabric/components/header-actions, formatProperty: es2015, processDts: true}
Debug: [Worker #2] Processing task: {entryPoint: @fabric/components/breadcrumbs, formatProperty: es2015, processDts: true}
Compiling @fabric/components/header-actions : es2015 as esm2015
Compiling @fabric/components/breadcrumbs : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/message : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug: [Worker #7] Processing task: {entryPoint: @fabric/components/sidenav, formatProperty: es2015, processDts: true}
Compiling @fabric/components/sidenav : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/header : es2015
Debug: All 7 workers are currently busy and cannot take on more work.
Debug:   Successfully compiled @fabric/components/confirmation-dialog : es2015
Debug:   Successfully compiled @fabric/components/breadcrumbs : es2015
Debug: No assignments for 1 idle (out of 7 total) workers. Busy workers: 1, 2, 3, 4, 6, 7
Debug: No assignments for 2 idle (out of 7 total) workers. Busy workers: 1, 3, 4, 6, 7
Debug: [Worker #3] Processing task: {entryPoint: @fabric/components/under-construction, formatProperty: es2015, processDts: true}
Compiling @fabric/components/under-construction : es2015 as esm2015
Debug:   Successfully compiled @fabric/components/multiselect : es2015
Debug: No assignments for 3 idle (out of 7 total) workers. Busy workers: 1, 3, 6, 7
Debug:   Successfully compiled @fabric/components/column-configuration-dialog : es2015
Debug: No assignments for 4 idle (out of 7 total) workers. Busy workers: 3, 6, 7
Debug:   Successfully compiled @fabric/components/header-actions : es2015
Debug: No assignments for 5 idle (out of 7 total) workers. Busy workers: 3, 7
Debug:   Successfully compiled @fabric/components/sidenav : es2015
Debug: No assignments for 6 idle (out of 7 total) workers. Busy workers: 3
Debug:   Successfully compiled @fabric/components/under-construction : es2015
Debug: Processed tasks in 16s.
Debug: Stopping 7 workers...
Debug: Attempting to remove lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: PIDs match (30480), so removing C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: Run ngcc in 17s.
Debug: Attempting to remove lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__.
Debug: The lock-file at C:/Users/<username>/AppData/Roaming/npm/node_modules/@angular/compiler-cli/ngcc/__ngcc_lock_file__ was already removed.

Here are my tsconfigs:
tsconfig.base

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "es2020",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ],
    "paths": {
      "@fabric/components/*": [
        "./dist/fabric-components/*"
      ]
    }
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  }
}

tsconfig.app

{
  "extends": "../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "types": []
  },
  "files": [
    "main.ts",
    "polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

tsconfig.lib

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "declaration": true,
    "inlineSources": true,
    "types": [],
    "lib": [
      "dom",
      "es2018"
    ]
  },
  "angularCompilerOptions": {
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "enableResourceInlining": true
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

@michaelfaith
Copy link
Author

Hmm, so I don't think that your paths should be pointing to the dist folder for your application. Just point them directly at the source:

    "paths": {
      "@fabric/components/*": [
        "./projects/fabric-components/*"
     }

Or something like that...

Unfortunately that doesn't change the behavior. I went back and tried to recreate this in a small demo app, since so much has changed since i tried before. I'm still not able to fully recreate the issue, in that the app build is still working ok in the simple case. But what i am able to recreate in the simple case is that invalid entry-point warning that the ngcc debug run is giving, when an entry-point depends on another. If that's possibly a symptom of the larger issue i'm experiencing with the full app, would it be helpful to share that? I don't understand why it doesn't fail the app build, like it does in the bigger project, though, or why pointing ngcc at my lib tsconfig fixes it.

@michaelfaith
Copy link
Author

michaelfaith commented Jul 9, 2020

@petebacondarwin OK! I finally managed to recreate it in the smaller app. The one difference that i hadn't incorporated in the simple case, is that our tsconfig.app is down one level from root, in the src folder. Once i made that change in the small app, the app build stopped working with the --prod built lib. Is it necessary to have that app tsconfig at the root level, or is this something that should be addressed as a bug?

@petebacondarwin
Copy link
Member

Interesting...

When ngcc runs standalone it will try to load paths information from a tsconfig file. If you do not provide an explicit path to the file via the --tsconfig option, then it tries to infer the file by looking for tsconfig.json in the root of the project - i.e. the directory above the directory specified by the --source option, which itself defaults to node_modules.

When ngcc is run as part of the CLI build, it already knows which tsconfig file is being used and gets the paths information from that file.

@petebacondarwin
Copy link
Member

By the way, @alan-agius4 reminded me that this statement is not correct:

Hmm, so I don't think that your paths should be pointing to the dist folder for your application. Just point them directly at the source:

You should never point at the source but at the compiled files.

That being said when using paths to point at a local library from a test app, I believe that you should normally be using ivy built libraries in the dist folder (i.e. not building them with --prod). This will completely avoid the need for ngcc to be run on those local libraries and will speed up your builds and make incremental builds more reliable. (@alan-agius4 can confirm if I have got this wrong too :-) )

@alan-agius4
Copy link
Contributor

@petebacondarwin, I confirm that.

@michaelfaith
Copy link
Author

michaelfaith commented Jul 10, 2020

Thanks so much for explaining that. So, @petebacondarwin, the way you described how ngcc is resolving the tsconfig on standalone runs actually helped reveal what i think is the bug here, at least in the regression i'm seeing from v9 to v10. One of the changes that the update schematic did to our project when upgrading to 10 was change the name of the root tsconfig to tsconfig.base, and created a new tsconfig that just referenced all the other tsconfigs in the project. So that got me thinking, maybe that change broke ngcc's attempt to find a tsconfig when one wasn't provided explicitly. And sure enough, that seems to be the case. This line of code from compiler-cli/src/perform_compile.ts#calcProjectFileAndBasePath appears to assume the base config is named 'tsconfig.json', and doesn't look for a tsconfig.base.json.

const projectFile = projectIsDir ? fs.join(absProject, 'tsconfig.json') : absProject;

Since our paths definition, that maps to the locally built lib, is in tsconfig.base (which used to be tsconfig), ngcc wasn't picking that up. I've confirmed my theory, in the little test app i managed to recreate this with. If i change the tsconfig.base file name back to tsconfig, ngcc starts building the endpoints correctly again, and the subsequent ng build for the test app works, which puts us back to working the way v9 did with the ngcc postinstall allowing us to use local lib builds done with --prod.

The reason we were using --prod on the lib builds was for our ci/cd pipeline. We weren't using it on our local dev machine builds, but for ci/cd we were wanting to run the test app with as close to an apples-to-apples comparison with what was being published. Rather than building the lib one way for testing and then another way for publishing. Building it with --prod for both in ci/cd (with the additional ngcc postinstall) was working ok in v9. But that broke with this update to v10. That forces us to use non-prod builds for our testing steps, which would work, but i think is less than ideal, you know? And it doesn't seem like it was intentional.

Anyway, now that i think we may have found the root cause, would it be worth opening a new issue for this, since it's not exactly what this original issue was for? And i could actually provide a test app, if needed.

@petebacondarwin
Copy link
Member

So I believe that this line (

const projectFile = projectIsDir ? fs.join(absProject, 'tsconfig.json') : absProject;
) is just copying what tsc would do. In other words, when not provided with an explicit tsconfig file path, it just looks for tsconfig.json in the project directory.

I don't think that is really a bug in our compiler.

Instead I think that we should look at where the paths are being stored in the new tsconfig file layouts.
What do you think @alan-agius4 ??

@petebacondarwin
Copy link
Member

So having talked offline to @alan-agius4 - I understand a bit more now.

With a solutions-style layout it is no longer possible for any of our compilers: ngcc, ngc or even tsc to infer the tsconfig file to use and it must be provided explicitly.

  1. At the least we should document this
  2. Additionally we could provide a warning in ngcc if the inferred tsconfig is found to be a solutions style file
  3. Possibly we could consider trying to use one or more of the references to compute the configuration for ngcc to use

@michaelfaith
Copy link
Author

michaelfaith commented Jul 10, 2020

Makes sense. I guess i don't fully appreciate the benefits of the solution-style layout, as it is. But i think any of those options would definitely help. The third would probably be best, but obviously require more work to implement. I guess in the interim, sounds like i could either just undo the solution-style layout change, or add the --tsconfig flag to the postinstall ngcc call, which are both viable options. Appreciate all the help figuring this out. I'd like to get to the point where i could actually help contribute changes for stuff like this. Will review your contributing guidelines.

petebacondarwin added a commit to petebacondarwin/angular that referenced this issue Jul 10, 2020
…onfig

In CLI v10 there was a move to use the new solution-style tsconfig
which became available in TS 3.9. The result of this is that the standard
tsconfig.json, which ngcc (and ngc and tsc) infer if not given a explicit
tsconfig file path no longer contains important information such as
"paths" mappings, which ngcc might need to correctly compute
dependencies.

This commit logs a warning in this case to inform the developer
that they might not have meant to load this tsconfig and offer
alternative options.

Fixes angular#36386
petebacondarwin added a commit to petebacondarwin/angular that referenced this issue Jul 10, 2020
…onfig

In CLI v10 there was a move to use the new solution-style tsconfig
which became available in TS 3.9. The result of this is that the standard
tsconfig.json, which ngcc (and ngc and tsc) infer if not given a explicit
tsconfig file path no longer contains important information such as
"paths" mappings, which ngcc might need to correctly compute
dependencies.

This commit logs a warning in this case to inform the developer
that they might not have meant to load this tsconfig and offer
alternative options.

Fixes angular#36386
@petebacondarwin
Copy link
Member

Created a PR to log the warning (i.e. 2. from above).
This would also act to document the issue (on-demand) so arguably it fixes 1. from above too.

petebacondarwin added a commit to petebacondarwin/angular that referenced this issue Jul 10, 2020
…onfig

In CLI v10 there was a move to use the new solution-style tsconfig
which became available in TS 3.9.

The result of this is that the standard tsconfig.json no longer contains
important information such as "paths" mappings, which ngcc might need to
correctly compute dependencies.

ngcc (and ngc and tsc) infer the path to tsconfig.json if not given an
explicit tsconfig file-path. But now that means it infers the solution
tsconfig rather than one that contains the useful information it used to
get.

This commit logs a warning in this case to inform the developer
that they might not have meant to load this tsconfig and offer
alternative options.

Fixes angular#36386
@michaelfaith
Copy link
Author

Awesome. Thanks for the quick turnaround. Appreciate it!

atscott pushed a commit that referenced this issue Jul 14, 2020
…onfig (#38003)

In CLI v10 there was a move to use the new solution-style tsconfig
which became available in TS 3.9.

The result of this is that the standard tsconfig.json no longer contains
important information such as "paths" mappings, which ngcc might need to
correctly compute dependencies.

ngcc (and ngc and tsc) infer the path to tsconfig.json if not given an
explicit tsconfig file-path. But now that means it infers the solution
tsconfig rather than one that contains the useful information it used to
get.

This commit logs a warning in this case to inform the developer
that they might not have meant to load this tsconfig and offer
alternative options.

Fixes #36386

PR Close #38003
atscott pushed a commit that referenced this issue Jul 14, 2020
…onfig (#38003)

In CLI v10 there was a move to use the new solution-style tsconfig
which became available in TS 3.9.

The result of this is that the standard tsconfig.json no longer contains
important information such as "paths" mappings, which ngcc might need to
correctly compute dependencies.

ngcc (and ngc and tsc) infer the path to tsconfig.json if not given an
explicit tsconfig file-path. But now that means it infers the solution
tsconfig rather than one that contains the useful information it used to
get.

This commit logs a warning in this case to inform the developer
that they might not have meant to load this tsconfig and offer
alternative options.

Fixes #36386

PR Close #38003
@hamfastgamgee
Copy link

After updating to 10.0.4 for our internal shared library, "ng build" is giving the new warning all the time, even if I explicitly point --tsConfig to the appropriate tsconfig.lib.json. Maybe it was doing the wrong thing before this fix by implicitly referring to the base tsconfig.json, but I don't immediately see a way to make it do the right thing.

@JoostK
Copy link
Member

JoostK commented Jul 15, 2020

@hamfastgamgee What versions are you using exactly? In particular, the CLI version and @ngtools/webpack version is relevant here.

@petebacondarwin
Copy link
Member

Ah, @hamfastgamgee, I guess that is being built via ng-packagr?

@JoostK
Copy link
Member

JoostK commented Jul 15, 2020

Oh hi Pete! ^^ ng-packagr could be it, yeah, I don't think that's been updated yet.

@hamfastgamgee
Copy link

Yeah, I was wondering if ng-packagr needed a corresponding update. I'm going to guess I'm not going to be the only person with this error. My immediate question is: What are the downsides? Do I need to leave my library on 9.1.x until this is resolved, or is it just basically an innocuous warning if everything seems to be working otherwise? (Not sure how much of tsconfig.lib.json ngcc uses.)

@petebacondarwin
Copy link
Member

If you are not using paths mappings in your libraries then there is no downside.
If you are using them, but not to external dependencies (i.e. other libraries) then again there should be no downside.
If you have paths mapped libraries that need to be processed by ngcc before this one, then there might be a problem.

@petebacondarwin
Copy link
Member

But for production (i.e. publishing to npm) there should be no problem since you will not be processing via ngcc.

@petebacondarwin
Copy link
Member

Also, looking at the ng-packagr code, I see that it is explicitly passing the paths mappings itself, so there should be no problem there. I've created a PR for that project anyway: ng-packagr/ng-packagr#1696

@angular-automatic-lock-bot
Copy link

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.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Aug 15, 2020
profanis pushed a commit to profanis/angular that referenced this issue Sep 5, 2020
…onfig (angular#38003)

In CLI v10 there was a move to use the new solution-style tsconfig
which became available in TS 3.9.

The result of this is that the standard tsconfig.json no longer contains
important information such as "paths" mappings, which ngcc might need to
correctly compute dependencies.

ngcc (and ngc and tsc) infer the path to tsconfig.json if not given an
explicit tsconfig file-path. But now that means it infers the solution
tsconfig rather than one that contains the useful information it used to
get.

This commit logs a warning in this case to inform the developer
that they might not have meant to load this tsconfig and offer
alternative options.

Fixes angular#36386

PR Close angular#38003
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
needs reproduction This issue needs a reproduction in order for the team to investigate further
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants