mirror of
https://github.com/aspnet/JavaScriptServices.git
synced 2025-12-25 02:57:31 +00:00
Add UseReactDevelopmentServer() middleware. Factor out common code.
This commit is contained in:
@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.NodeServices.Npm;
|
||||
using Microsoft.AspNetCore.NodeServices.Util;
|
||||
using Microsoft.AspNetCore.SpaServices.Prerendering;
|
||||
using Microsoft.AspNetCore.SpaServices.Util;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
@@ -46,11 +47,14 @@ namespace Microsoft.AspNetCore.SpaServices.AngularCli
|
||||
throw new InvalidOperationException($"To use {nameof(AngularCliBuilder)}, you must supply a non-empty value for the {nameof(SpaOptions.SourcePath)} property of {nameof(SpaOptions)} when calling {nameof(SpaApplicationBuilderExtensions.UseSpa)}.");
|
||||
}
|
||||
|
||||
var logger = AngularCliMiddleware.GetOrCreateLogger(spaBuilder.ApplicationBuilder);
|
||||
var logger = LoggerFinder.GetOrCreateLogger(
|
||||
spaBuilder.ApplicationBuilder,
|
||||
nameof(AngularCliBuilder));
|
||||
var npmScriptRunner = new NpmScriptRunner(
|
||||
sourcePath,
|
||||
_npmScriptName,
|
||||
"--watch");
|
||||
"--watch",
|
||||
null);
|
||||
npmScriptRunner.AttachToLogger(logger);
|
||||
|
||||
using (var stdErrReader = new EventedStreamStringReader(npmScriptRunner.StdErr))
|
||||
|
||||
@@ -2,17 +2,14 @@
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.NodeServices.Npm;
|
||||
using System.Text.RegularExpressions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging.Console;
|
||||
using System.Net.Sockets;
|
||||
using System.Net;
|
||||
using System.IO;
|
||||
using Microsoft.AspNetCore.NodeServices.Npm;
|
||||
using Microsoft.AspNetCore.NodeServices.Util;
|
||||
using Microsoft.AspNetCore.SpaServices.Util;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.SpaServices.AngularCli
|
||||
{
|
||||
@@ -39,7 +36,7 @@ namespace Microsoft.AspNetCore.SpaServices.AngularCli
|
||||
|
||||
// Start Angular CLI and attach to middleware pipeline
|
||||
var appBuilder = spaBuilder.ApplicationBuilder;
|
||||
var logger = GetOrCreateLogger(appBuilder);
|
||||
var logger = LoggerFinder.GetOrCreateLogger(appBuilder, LogCategoryName);
|
||||
var angularCliServerInfoTask = StartAngularCliServerAsync(sourcePath, npmScriptName, logger);
|
||||
|
||||
// Everything we proxy is hardcoded to target http://localhost because:
|
||||
@@ -53,24 +50,14 @@ namespace Microsoft.AspNetCore.SpaServices.AngularCli
|
||||
SpaProxyingExtensions.UseProxyToSpaDevelopmentServer(spaBuilder, targetUriTask);
|
||||
}
|
||||
|
||||
internal static ILogger GetOrCreateLogger(IApplicationBuilder appBuilder)
|
||||
{
|
||||
// If the DI system gives us a logger, use it. Otherwise, set up a default one.
|
||||
var loggerFactory = appBuilder.ApplicationServices.GetService<ILoggerFactory>();
|
||||
var logger = loggerFactory != null
|
||||
? loggerFactory.CreateLogger(LogCategoryName)
|
||||
: new ConsoleLogger(LogCategoryName, null, false);
|
||||
return logger;
|
||||
}
|
||||
|
||||
private static async Task<AngularCliServerInfo> StartAngularCliServerAsync(
|
||||
string sourcePath, string npmScriptName, ILogger logger)
|
||||
{
|
||||
var portNumber = FindAvailablePort();
|
||||
var portNumber = TcpPortFinder.FindAvailablePort();
|
||||
logger.LogInformation($"Starting @angular/cli on port {portNumber}...");
|
||||
|
||||
var npmScriptRunner = new NpmScriptRunner(
|
||||
sourcePath, npmScriptName, $"--port {portNumber}");
|
||||
sourcePath, npmScriptName, $"--port {portNumber}", null);
|
||||
npmScriptRunner.AttachToLogger(logger);
|
||||
|
||||
Match openBrowserLine;
|
||||
@@ -109,20 +96,6 @@ namespace Microsoft.AspNetCore.SpaServices.AngularCli
|
||||
return serverInfo;
|
||||
}
|
||||
|
||||
private static int FindAvailablePort()
|
||||
{
|
||||
var listener = new TcpListener(IPAddress.Loopback, 0);
|
||||
listener.Start();
|
||||
try
|
||||
{
|
||||
return ((IPEndPoint)listener.LocalEndpoint).Port;
|
||||
}
|
||||
finally
|
||||
{
|
||||
listener.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
class AngularCliServerInfo
|
||||
{
|
||||
public int Port { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user