fix(compiler-cli): do not add references to files outside of rootDir
(#19770)
References to resources (such as .css files) that are generated into the `outDir` directory outside of `rootDir` would cause a spurious compiler error about not being able to find a files that ends in '.ngstyle.ts'. Also fixed a minor issue in compiler error reporting Fixes: #19765, #19767 PR Close #19770
This commit is contained in:

committed by
Tobias Bosch

parent
3861ba2929
commit
25cbc98979
@ -363,7 +363,8 @@ export class TsCompilerAotCompilerTypeCheckHostAdapter extends
|
|||||||
genFileNames = cachedGenFiles;
|
genFileNames = cachedGenFiles;
|
||||||
} else {
|
} else {
|
||||||
if (!this.options.noResolve && this.shouldGenerateFilesFor(fileName)) {
|
if (!this.options.noResolve && this.shouldGenerateFilesFor(fileName)) {
|
||||||
genFileNames = this.codeGenerator.findGeneratedFileNames(fileName);
|
genFileNames = this.codeGenerator.findGeneratedFileNames(fileName).filter(
|
||||||
|
fileName => this.shouldGenerateFile(fileName).generate);
|
||||||
}
|
}
|
||||||
this.generatedCodeFor.set(fileName, genFileNames);
|
this.generatedCodeFor.set(fileName, genFileNames);
|
||||||
}
|
}
|
||||||
|
@ -1350,4 +1350,46 @@ describe('ngc transformer command-line', () => {
|
|||||||
it('should recompile when the css file changes',
|
it('should recompile when the css file changes',
|
||||||
expectRecompile(() => { write('greet.css', `p.greeting { color: blue }`); }));
|
expectRecompile(() => { write('greet.css', `p.greeting { color: blue }`); }));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('regressions', () => {
|
||||||
|
// #19765
|
||||||
|
it('should not report an error when the resolved .css file is in outside rootDir', () => {
|
||||||
|
write('src/tsconfig.json', `{
|
||||||
|
"extends": "../tsconfig-base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../dist",
|
||||||
|
"rootDir": ".",
|
||||||
|
"rootDirs": [
|
||||||
|
".",
|
||||||
|
"../dist"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"files": ["test-module.ts"]
|
||||||
|
}`);
|
||||||
|
write('src/lib/test.component.ts', `
|
||||||
|
import {Component} from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
template: '<p>hello</p>',
|
||||||
|
styleUrls: ['./test.component.css']
|
||||||
|
})
|
||||||
|
export class TestComponent {}
|
||||||
|
`);
|
||||||
|
write('dist/dummy.txt', ''); // Force dist to be created
|
||||||
|
write('dist/lib/test.component.css', `
|
||||||
|
p { color: blue }
|
||||||
|
`);
|
||||||
|
write('src/test-module.ts', `
|
||||||
|
import {NgModule} from '@angular/core';
|
||||||
|
import {TestComponent} from './lib/test.component';
|
||||||
|
|
||||||
|
@NgModule({declarations: [TestComponent]})
|
||||||
|
export class TestModule {}
|
||||||
|
`);
|
||||||
|
const messages: string[] = [];
|
||||||
|
const exitCode =
|
||||||
|
main(['-p', path.join(basePath, 'src/tsconfig.json')], message => messages.push(message));
|
||||||
|
expect(exitCode).toBe(0, 'Compile failed unexpectedly.\n ' + messages.join('\n '));
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -252,10 +252,10 @@ describe('NgCompilerHost', () => {
|
|||||||
it('should clear old generated references if the original host cached them', () => {
|
it('should clear old generated references if the original host cached them', () => {
|
||||||
codeGenerator.findGeneratedFileNames.and.returnValue(['/tmp/src/index.ngfactory.ts']);
|
codeGenerator.findGeneratedFileNames.and.returnValue(['/tmp/src/index.ngfactory.ts']);
|
||||||
|
|
||||||
const ngHost = createNgHost();
|
|
||||||
const sfText = `
|
const sfText = `
|
||||||
/// <reference path="main.ts"/>
|
/// <reference path="main.ts"/>
|
||||||
`;
|
`;
|
||||||
|
const ngHost = createNgHost({files: {'tmp': {'src': {'index.ts': sfText}}}});
|
||||||
const sf = ts.createSourceFile('/tmp/src/index.ts', sfText, ts.ScriptTarget.Latest);
|
const sf = ts.createSourceFile('/tmp/src/index.ts', sfText, ts.ScriptTarget.Latest);
|
||||||
ngHost.getSourceFile = () => sf;
|
ngHost.getSourceFile = () => sf;
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ export class AotCompiler {
|
|||||||
compMeta.template !.styleUrls.forEach((styleUrl) => {
|
compMeta.template !.styleUrls.forEach((styleUrl) => {
|
||||||
const normalizedUrl = this._host.resourceNameToFileName(styleUrl, file.fileName);
|
const normalizedUrl = this._host.resourceNameToFileName(styleUrl, file.fileName);
|
||||||
if (!normalizedUrl) {
|
if (!normalizedUrl) {
|
||||||
throw new Error(`Couldn't resolve resource ${styleUrl} relative to ${file.fileName}`);
|
throw syntaxError(`Couldn't resolve resource ${styleUrl} relative to ${file.fileName}`);
|
||||||
}
|
}
|
||||||
const needsShim = (compMeta.template !.encapsulation ||
|
const needsShim = (compMeta.template !.encapsulation ||
|
||||||
this._config.defaultEncapsulation) === ViewEncapsulation.Emulated;
|
this._config.defaultEncapsulation) === ViewEncapsulation.Emulated;
|
||||||
|
Reference in New Issue
Block a user