From 68c4620a55aae7fd233b719325c62f596df0e39e Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Thu, 16 Nov 2017 09:48:38 +0000 Subject: [PATCH] Consider React dev server ready when it starts listening, not when (and if) it compiles successfully --- .../ReactDevelopmentServerMiddleware.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.AspNetCore.SpaServices.Extensions/ReactDevelopmentServer/ReactDevelopmentServerMiddleware.cs b/src/Microsoft.AspNetCore.SpaServices.Extensions/ReactDevelopmentServer/ReactDevelopmentServerMiddleware.cs index 58669af..4a81562 100644 --- a/src/Microsoft.AspNetCore.SpaServices.Extensions/ReactDevelopmentServer/ReactDevelopmentServerMiddleware.cs +++ b/src/Microsoft.AspNetCore.SpaServices.Extensions/ReactDevelopmentServer/ReactDevelopmentServerMiddleware.cs @@ -66,13 +66,16 @@ namespace Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer sourcePath, npmScriptName, null, envVars); npmScriptRunner.AttachToLogger(logger); - Match openBrowserLine; using (var stdErrReader = new EventedStreamStringReader(npmScriptRunner.StdErr)) { try { - openBrowserLine = await npmScriptRunner.StdOut.WaitForMatch( - new Regex("Local:\\s*(http\\S+)", RegexOptions.None, RegexMatchTimeout), + // Although the React dev server may eventually tell us the URL it's listening on, + // it doesn't do so until it's finished compiling, and even then only if there were + // no compiler warnings. So instead of waiting for that, consider it ready as soon + // as it starts listening for requests. + await npmScriptRunner.StdOut.WaitForMatch( + new Regex("Starting the development server", RegexOptions.None, RegexMatchTimeout), StartupTimeout); } catch (EndOfStreamException ex) @@ -91,8 +94,7 @@ namespace Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer } } - var uri = new Uri(openBrowserLine.Groups[1].Value); - return uri.Port; + return portNumber; } } }