mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-23 23:59:27 +08:00
fix(@ngtools/webpack): fixes ngcc error when project name is the same or partially the same as a module name
FIxes #14317
This commit is contained in:
parent
8e13c95224
commit
4263cc6e63
@ -674,6 +674,7 @@ export class AngularCompilerPlugin {
|
|||||||
compilerWithFileSystems.inputFileSystem,
|
compilerWithFileSystems.inputFileSystem,
|
||||||
this._warnings,
|
this._warnings,
|
||||||
this._errors,
|
this._errors,
|
||||||
|
this._basePath,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,10 +7,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Logger } from '@angular/compiler-cli/ngcc';
|
import { Logger } from '@angular/compiler-cli/ngcc';
|
||||||
|
import { existsSync } from 'fs';
|
||||||
|
import * as path from 'path';
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import { InputFileSystem } from 'webpack';
|
import { InputFileSystem } from 'webpack';
|
||||||
import { time, timeEnd } from './benchmark';
|
import { time, timeEnd } from './benchmark';
|
||||||
import { workaroundResolve } from './utils';
|
|
||||||
|
|
||||||
// We cannot create a plugin for this, because NGTSC requires addition type
|
// We cannot create a plugin for this, because NGTSC requires addition type
|
||||||
// information which ngcc creates when processing a package which was compiled with NGC.
|
// information which ngcc creates when processing a package which was compiled with NGC.
|
||||||
@ -24,8 +25,8 @@ import { workaroundResolve } from './utils';
|
|||||||
|
|
||||||
export class NgccProcessor {
|
export class NgccProcessor {
|
||||||
private _processedModules = new Set<string>();
|
private _processedModules = new Set<string>();
|
||||||
|
|
||||||
private _logger: NgccLogger;
|
private _logger: NgccLogger;
|
||||||
|
private _nodeModulesDirectory: string;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly ngcc: typeof import('@angular/compiler-cli/ngcc'),
|
private readonly ngcc: typeof import('@angular/compiler-cli/ngcc'),
|
||||||
@ -33,8 +34,10 @@ export class NgccProcessor {
|
|||||||
private readonly inputFileSystem: InputFileSystem,
|
private readonly inputFileSystem: InputFileSystem,
|
||||||
private readonly compilationWarnings: (Error | string)[],
|
private readonly compilationWarnings: (Error | string)[],
|
||||||
private readonly compilationErrors: (Error | string)[],
|
private readonly compilationErrors: (Error | string)[],
|
||||||
|
private readonly basePath: string,
|
||||||
) {
|
) {
|
||||||
this._logger = new NgccLogger(this.compilationWarnings, this.compilationErrors);
|
this._logger = new NgccLogger(this.compilationWarnings, this.compilationErrors);
|
||||||
|
this._nodeModulesDirectory = this.findNodeModulesDirectory(this.basePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
processModule(
|
processModule(
|
||||||
@ -57,13 +60,12 @@ export class NgccProcessor {
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const normalizedJsonPath = workaroundResolve(packageJsonPath);
|
|
||||||
|
|
||||||
const timeLabel = `NgccProcessor.processModule.ngcc.process+${moduleName}`;
|
const timeLabel = `NgccProcessor.processModule.ngcc.process+${moduleName}`;
|
||||||
time(timeLabel);
|
time(timeLabel);
|
||||||
this.ngcc.process({
|
this.ngcc.process({
|
||||||
basePath: normalizedJsonPath.substring(0, normalizedJsonPath.indexOf(moduleName)),
|
basePath: this._nodeModulesDirectory,
|
||||||
targetEntryPointPath: moduleName,
|
targetEntryPointPath: path.dirname(packageJsonPath),
|
||||||
propertiesToConsider: this.propertiesToConsider,
|
propertiesToConsider: this.propertiesToConsider,
|
||||||
compileAllFormats: false,
|
compileAllFormats: false,
|
||||||
createNewEntryPointFormats: true,
|
createNewEntryPointFormats: true,
|
||||||
@ -101,6 +103,20 @@ export class NgccProcessor {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private findNodeModulesDirectory(startPoint: string): string {
|
||||||
|
let current = startPoint;
|
||||||
|
while (path.dirname(current) !== current) {
|
||||||
|
const nodePath = path.join(current, 'node_modules');
|
||||||
|
if (existsSync(nodePath)) {
|
||||||
|
return nodePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = path.dirname(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(`Cannot locate the 'node_modules' directory.`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class NgccLogger implements Logger {
|
class NgccLogger implements Logger {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user