angular: Ivy (9.1.5) causes build failure

🐞 bug report

Affected Package

The issue is caused by package @angular/compiler-cli (ngcc)

Is this a regression?

Yes, the previous version in which this bug was not present was: `9.1.0`

Description

In JIT mode build fails with File name ‘node_modules/apollo-angular/selectpipe.d.ts’ differs from already included file name ‘node_modules/apollo-angular/SelectPipe.d.ts’ only in casing In AOT mode build fails with Symbol SelectPipe declared in * is not exported from apollo-angular

🔬 Minimal Reproduction

Clone https://github.com/n9niwas/ngccbug Run

yarn
yarn start

🔥 Exception or Error


ERROR in node_modules/apollo-angular/ApolloModule.d.ts:4:25 - error TS1149: File name '/Users/blah/Documents/ngrepros/ngccbug/node_modules/apollo-angular/selectpipe.d.ts' differs from already included file name '/Users/blah/Documents/ngrepros/ngccbug/node_modules/apollo-angular/SelectPipe.d.ts' only in casing.

4 import * as ɵngcc1 from './selectpipe';

Also if I enable aot the error is different:


ERROR in Symbol SelectPipe declared in /Users/blah/Documents/ngrepros/ngccbug/node_modules/apollo-angular/selectpipe.d.ts is not exported from apollo-angular (import into /Users/blah/Documents/ngrepros/ngccbug/src/app/app.component.ts)

This was also working fine in 9.1.0

🌍 Your Environment

Angular Version:


Angular CLI: 9.1.4
Node: 13.11.0
OS: darwin x64

Angular: 9.1.5
... 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.4
@angular-devkit/build-angular     0.901.4
@angular-devkit/build-optimizer   0.901.4
@angular-devkit/build-webpack     0.901.4
@angular-devkit/core              9.1.4
@angular-devkit/schematics        9.1.4
@angular/cli                      9.1.4
@ngtools/webpack                  9.1.4
@schematics/angular               9.1.4
@schematics/update                0.901.4
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: 3
  • Comments: 25 (8 by maintainers)

Commits related to this issue

Most upvoted comments

@xiaotaoliu - for now roll-back your Angular versions to 9.1.4. You can do this by changing all the @angular/... framework packages in your package.json to 9.1.4.

E.g.

  "dependencies": {
    "@angular/animations": "9.1.4",
    "@angular/cdk": "^9.2.2",
    "@angular/common": "9.1.4",
    "@angular/compiler": "9.1.4",
    "@angular/core": "9.1.4",
    "@angular/elements": "9.1.4",
    "@angular/forms": "9.1.4",
    "@angular/material": "^9.2.2",
    "@angular/platform-browser": "9.1.4",
    "@angular/platform-browser-dynamic": "9.1.4",
    "@angular/router": "9.1.4",
    "@angular/service-worker": "9.1.4",
    ...
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "0.901.4",
    "@angular/cli": "9.1.4",
    "@angular/compiler-cli": "9.1.4",
    "@angular/language-service": "9.1.4",
    ...

And then re-installing your dependencies (i.e. yarn or npm install).

Thanks for the reproduction @n9niwas. It made all the difference!

I have found the problem. It is a bug in ngcc.

During processing ngcc is spotting that the operating system is case-insensitive and then adding imports to files with canonical paths. E.g.

import { Apollo } from './Apollo';
import { SelectPipe } from './SelectPipe';
import * as ɵngcc0 from '@angular/core';
import * as ɵngcc1 from './selectpipe';
export declare const PROVIDERS: (typeof Apollo)[];
export declare const DECLARATIONS: (typeof SelectPipe)[];
export declare class ApolloModule {
    static ɵmod: ɵngcc0.ɵɵNgModuleDefWithMeta<ApolloModule, [typeof ɵngcc1.SelectPipe], never, [typeof ɵngcc1.SelectPipe]>;
    static ɵinj: ɵngcc0.ɵɵInjectorDef<ApolloModule>;
}

Note that there are two imports to the same file:

import { SelectPipe } from './SelectPipe';
import * as ɵngcc1 from './selectpipe';

The first is from the original file. The second is added by ngcc.

Working on a fix.

We have just released 9.1.6 which should not have this problem. Please test.

@simonua Thanks a lot…It worked.