diff --git a/packages/angular_devkit/build_angular/src/server/index.ts b/packages/angular_devkit/build_angular/src/server/index.ts index fa369b1899..ccf710c05e 100644 --- a/packages/angular_devkit/build_angular/src/server/index.ts +++ b/packages/angular_devkit/build_angular/src/server/index.ts @@ -94,7 +94,14 @@ export class ServerBuilder implements Builder { }; try { - webpackCompiler.run(callback); + if (options.watch) { + const watching = webpackCompiler.watch({ poll: options.poll }, callback); + + // Teardown logic. Close the watcher when unsubscribed from. + return () => watching.close(() => { }); + } else { + webpackCompiler.run(callback); + } } catch (err) { if (err) { this.context.logger.error( diff --git a/packages/angular_devkit/build_angular/src/server/schema.d.ts b/packages/angular_devkit/build_angular/src/server/schema.d.ts index 12ec739897..aed125a00c 100644 --- a/packages/angular_devkit/build_angular/src/server/schema.d.ts +++ b/packages/angular_devkit/build_angular/src/server/schema.d.ts @@ -113,6 +113,14 @@ export interface BuildWebpackServerSchema { * Use file name for lazy loaded chunks. */ namedChunks?: boolean; + /** + * Run build when files change. + */ + watch?: boolean; + /** + * Enable and define the file watching poll time period in milliseconds. + */ + poll?: number; } /** diff --git a/packages/angular_devkit/build_angular/src/server/schema.json b/packages/angular_devkit/build_angular/src/server/schema.json index e3533f3fc9..7d32897cf9 100644 --- a/packages/angular_devkit/build_angular/src/server/schema.json +++ b/packages/angular_devkit/build_angular/src/server/schema.json @@ -152,6 +152,15 @@ "type": "string" }, "default": [] + }, + "watch": { + "type": "boolean", + "description": "Run build when files change.", + "default": false + }, + "poll": { + "type": "number", + "description": "Enable and define the file watching poll time period in milliseconds." } }, "additionalProperties": false, @@ -197,6 +206,6 @@ } ] } - + } } \ No newline at end of file diff --git a/packages/angular_devkit/build_angular/test/server/base_spec_large.ts b/packages/angular_devkit/build_angular/test/server/base_spec_large.ts index ccac7ea876..1bb398e429 100644 --- a/packages/angular_devkit/build_angular/test/server/base_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/server/base_spec_large.ts @@ -30,4 +30,18 @@ describe('Server Builder', () => { }), ).subscribe(undefined, done.fail, done); }, Timeout.Standard); + + it('runs watch mode', (done) => { + const overrides = { watch: true }; + + runTargetSpec(host, { project: 'app', target: 'server' }, overrides).pipe( + tap((buildEvent) => { + expect(buildEvent.success).toBe(true); + + const fileName = join(outputPath, 'main.js'); + const content = virtualFs.fileBufferToString(host.scopedSync().read(normalize(fileName))); + expect(content).toMatch(/AppServerModuleNgFactory/); + }), + ).subscribe(undefined, done.fail, done); + }, Timeout.Standard); });