refactor(compiler): don’t always compile `.ngfactory.ts` files by default

This puts the behavior introduced in 573b8611bc behind the new flag
`alwaysCompileGeneratedCode` to not break users that might have relied
on this behavior.
This commit is contained in:
Tobias Bosch 2017-06-12 14:10:08 -07:00 committed by Alex Rickabaugh
parent 6ca46929fa
commit ed73d4f3ac
5 changed files with 51 additions and 7 deletions

View File

@ -1,7 +1,8 @@
{ {
"angularCompilerOptions": { "angularCompilerOptions": {
"annotationsAs": "static fields", "annotationsAs": "static fields",
"annotateForClosureCompiler": true "annotateForClosureCompiler": true,
"alwaysCompileGeneratedCode": true
}, },
"compilerOptions": { "compilerOptions": {

View File

@ -4,7 +4,8 @@
// in the same source directory with your code. // in the same source directory with your code.
"genDir": ".", "genDir": ".",
"debug": true, "debug": true,
"enableSummariesForJit": true "enableSummariesForJit": true,
"alwaysCompileGeneratedCode": true
}, },
"compilerOptions": { "compilerOptions": {

View File

@ -199,10 +199,40 @@ describe('compiler-cli', () => {
}); });
describe('compile ngfactory files', () => { describe('compile ngfactory files', () => {
it('should only compile ngfactory files that are referenced by root files by default',
(done) => {
writeConfig(`{
"extends": "./tsconfig-base.json",
"files": ["mymodule.ts"]
}`);
write('mymodule.ts', `
import {CommonModule} from '@angular/common';
import {NgModule} from '@angular/core';
@NgModule({
imports: [CommonModule]
})
export class MyModule {}
`);
main({p: basePath})
.then((exitCode) => {
expect(exitCode).toEqual(0);
expect(fs.existsSync(path.resolve(outDir, 'mymodule.ngfactory.js'))).toBe(false);
done();
})
.catch(e => done.fail(e));
});
it('should report errors for ngfactory files that are not referenced by root files', (done) => { it('should report errors for ngfactory files that are not referenced by root files', (done) => {
writeConfig(`{ writeConfig(`{
"extends": "./tsconfig-base.json", "extends": "./tsconfig-base.json",
"files": ["mymodule.ts"] "files": ["mymodule.ts"],
"angularCompilerOptions": {
"alwaysCompileGeneratedCode": true
}
}`); }`);
write('mymodule.ts', ` write('mymodule.ts', `
import {NgModule, Component} from '@angular/core'; import {NgModule, Component} from '@angular/core';
@ -235,7 +265,10 @@ describe('compiler-cli', () => {
it('should compile ngfactory files that are not referenced by root files', (done) => { it('should compile ngfactory files that are not referenced by root files', (done) => {
writeConfig(`{ writeConfig(`{
"extends": "./tsconfig-base.json", "extends": "./tsconfig-base.json",
"files": ["mymodule.ts"] "files": ["mymodule.ts"],
"angularCompilerOptions": {
"alwaysCompileGeneratedCode": true
}
}`); }`);
write('mymodule.ts', ` write('mymodule.ts', `
import {CommonModule} from '@angular/common'; import {CommonModule} from '@angular/common';
@ -289,7 +322,8 @@ describe('compiler-cli', () => {
"extends": "./tsconfig-base.json", "extends": "./tsconfig-base.json",
"files": ["mymodule.ts"], "files": ["mymodule.ts"],
"angularCompilerOptions": { "angularCompilerOptions": {
"enableSummariesForJit": true "enableSummariesForJit": true,
"alwaysCompileGeneratedCode": true
} }
}`); }`);
write('mymodule.ts', ` write('mymodule.ts', `

View File

@ -124,8 +124,11 @@ export function main(
if (diagnostics) console.time('NG codegen'); if (diagnostics) console.time('NG codegen');
return codegen(ngOptions, cliOptions, program, host).then((genFiles) => { return codegen(ngOptions, cliOptions, program, host).then((genFiles) => {
if (diagnostics) console.timeEnd('NG codegen'); if (diagnostics) console.timeEnd('NG codegen');
// Add the generated files to the configuration so they will become part of the program. // Add the generated files to the configuration so they will become part of the program.
genFiles.forEach(genFileName => addGeneratedFileName(genFileName)); if (ngOptions.alwaysCompileGeneratedCode) {
genFiles.forEach(genFileName => addGeneratedFileName(genFileName));
}
let definitionsHost: ts.CompilerHost = tsickleCompilerHost; let definitionsHost: ts.CompilerHost = tsickleCompilerHost;
if (!ngOptions.skipMetadataEmit) { if (!ngOptions.skipMetadataEmit) {
// if tsickle is not not used for emitting, but we do use the MetadataWriterHost, // if tsickle is not not used for emitting, but we do use the MetadataWriterHost,

View File

@ -83,8 +83,13 @@ interface Options extends ts.CompilerOptions {
enableLegacyTemplate?: boolean; enableLegacyTemplate?: boolean;
// Whether to generate .ngsummary.ts files that allow to use AOTed artifacts // Whether to generate .ngsummary.ts files that allow to use AOTed artifacts
// in JIT mode. // in JIT mode. This is off by default.
enableSummariesForJit?: boolean; enableSummariesForJit?: boolean;
// Whether to compile generated .ngfacgtory.ts files, even when they are no
// matched by the `files` / `includes` in the `tsconfig.json`.
// This is off by default.
alwaysCompileGeneratedCode?: boolean;
} }
export default Options; export default Options;