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

refactor(compiler): don’t always compile .ngfactory.ts files by def… #17439

Merged
merged 1 commit into from Jun 12, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion integration/hello_world__closure/tsconfig.json
@@ -1,7 +1,8 @@
{
"angularCompilerOptions": {
"annotationsAs": "static fields",
"annotateForClosureCompiler": true
"annotateForClosureCompiler": true,
"alwaysCompileGeneratedCode": true
},

"compilerOptions": {
Expand Down
3 changes: 2 additions & 1 deletion packages/compiler-cli/integrationtest/tsconfig-build.json
Expand Up @@ -4,7 +4,8 @@
// in the same source directory with your code.
"genDir": ".",
"debug": true,
"enableSummariesForJit": true
"enableSummariesForJit": true,
"alwaysCompileGeneratedCode": true
},

"compilerOptions": {
Expand Down
40 changes: 37 additions & 3 deletions packages/compiler-cli/test/main_spec.ts
Expand Up @@ -199,10 +199,40 @@ describe('compiler-cli', () => {
});

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) => {
writeConfig(`{
"extends": "./tsconfig-base.json",
"files": ["mymodule.ts"]
"files": ["mymodule.ts"],
"angularCompilerOptions": {
"alwaysCompileGeneratedCode": true
}
}`);
write('mymodule.ts', `
import {NgModule, Component} from '@angular/core';
Expand Down Expand Up @@ -235,7 +265,10 @@ describe('compiler-cli', () => {
it('should compile ngfactory files that are not referenced by root files', (done) => {
writeConfig(`{
"extends": "./tsconfig-base.json",
"files": ["mymodule.ts"]
"files": ["mymodule.ts"],
"angularCompilerOptions": {
"alwaysCompileGeneratedCode": true
}
}`);
write('mymodule.ts', `
import {CommonModule} from '@angular/common';
Expand Down Expand Up @@ -289,7 +322,8 @@ describe('compiler-cli', () => {
"extends": "./tsconfig-base.json",
"files": ["mymodule.ts"],
"angularCompilerOptions": {
"enableSummariesForJit": true
"enableSummariesForJit": true,
"alwaysCompileGeneratedCode": true
}
}`);
write('mymodule.ts', `
Expand Down
5 changes: 4 additions & 1 deletion tools/@angular/tsc-wrapped/src/main.ts
Expand Up @@ -124,8 +124,11 @@ export function main(
if (diagnostics) console.time('NG codegen');
return codegen(ngOptions, cliOptions, program, host).then((genFiles) => {
if (diagnostics) console.timeEnd('NG codegen');

// 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;
if (!ngOptions.skipMetadataEmit) {
// if tsickle is not not used for emitting, but we do use the MetadataWriterHost,
Expand Down
7 changes: 6 additions & 1 deletion tools/@angular/tsc-wrapped/src/options.ts
Expand Up @@ -83,8 +83,13 @@ interface Options extends ts.CompilerOptions {
enableLegacyTemplate?: boolean;

// 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;

// 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;