protected internal override void Execute() { // Build angular client if (!UtilCli.FolderNameExist(UtilFramework.FolderName + "Application.Server/Framework/Framework.Angular/")) { var commandBuild = new CommandBuild(AppCli); UtilCli.OptionSet(ref commandBuild.OptionClientOnly, true); commandBuild.Execute(); } if (optionWatch.OptionGet()) { ConfigCli configCli = ConfigCli.Load(); var website = configCli.WebsiteList.First(item => item.FolderNameDist != null); // TODO choose if multiple string folderNameNpmBuilt = UtilFramework.FolderName + website.FolderNameNpmBuild; string folderNameDist = UtilFramework.FolderName + website.FolderNameDist; string folderNameAngular = UtilFramework.FolderName + "Framework/Framework.Angular/application/"; string folderNameCustomComponent = UtilFramework.FolderName + "Application.Website/Shared/CustomComponent/"; UtilCli.ConsoleWriteLineColor("Port: http://localhost:4200/", System.ConsoleColor.Green); UtilCli.ConsoleWriteLineColor("Website: " + folderNameNpmBuilt, System.ConsoleColor.Green); UtilCli.ConsoleWriteLineColor("CustomComponent: " + folderNameCustomComponent, System.ConsoleColor.Green); UtilCli.ConsoleWriteLineColor("Framework: " + folderNameAngular, System.ConsoleColor.Green); FileSync fileSync = new FileSync(); fileSync.AddFolder(folderNameDist, folderNameAngular + "src/Application.Website/Default/"); // TODO fileSync.AddFolder(folderNameCustomComponent, folderNameAngular + "src/Application.Website/Shared/CustomComponent/"); UtilCli.Npm(folderNameNpmBuilt, "run build -- --watch", isWait: false); UtilCli.Npm(folderNameAngular, "start", isWait: true); } else { string folderName = UtilFramework.FolderName + @"Application.Server/"; UtilCli.VersionBuild(() => { UtilCli.DotNet(folderName, "build"); }); UtilCli.DotNet(folderName, "run --no-build", false); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { UtilCli.OpenWebBrowser("http://localhost:50919/"); // For port setting see also: Application.Server\Properties\launchSettings.json (applicationUrl, sslPort) } if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // Ubuntu list all running processes: 'ps' // To reboot Ubuntu type on Windows command prompt: 'wsl -t Ubuntu-18.04' // Ubuntu show processes tool: 'htop' UtilCli.ConsoleWriteLineColor("Stop server with command: 'killall -SIGKILL Application.Server node dotnet'", System.ConsoleColor.Yellow); } } }
/// <summary> /// Execute "npm run build" command. /// </summary> private static void BuildWebsiteNpm(ConfigCliWebsite website) { string folderNameNpmBuild = UtilFramework.FolderNameParse(website.FolderNameNpmBuild); if (UtilFramework.StringNull(folderNameNpmBuild) != null) { string folderName = UtilFramework.FolderName + folderNameNpmBuild; UtilCli.Npm(folderName, "install --loglevel error"); // --loglevel error prevent writing to STDERR "npm WARN optional SKIPPING OPTIONAL DEPENDENCY" UtilCli.Npm(folderName, "run build"); } }
/// <summary> /// Build Framework/Framework.Angular/application/. /// </summary> private static void BuildAngular() { // Build SSR { string folderName = UtilFramework.FolderName + "Framework/Framework.Angular/application/"; UtilCli.Npm(folderName, "install --loglevel error"); // Angular install. --loglevel error prevent writing to STDERR "npm WARN optional SKIPPING OPTIONAL DEPENDENCY" UtilCli.Npm(folderName, "run build:ssr", isRedirectStdErr: true); // Build Server-side Rendering (SSR) to folder Framework/Framework.Angular/application/server/dist/ // TODO Bug report Angular build writes to stderr. Repo steps: Delete node_modules and run npm install and then run build:ssr. } // Copy output dist folder { string folderNameSource = UtilFramework.FolderName + "Framework/Framework.Angular/application/dist/application/"; string folderNameDest = UtilFramework.FolderName + "Application.Server/Framework/Framework.Angular/"; // Copy folder UtilCli.FolderDelete(folderNameDest); UtilFramework.Assert(!Directory.Exists(folderNameDest)); UtilCli.FolderCopy(folderNameSource, folderNameDest, "*.*", true); UtilFramework.Assert(Directory.Exists(folderNameDest)); } }
protected internal override void Execute() { // Build angular client if (!UtilCli.FolderNameExist(UtilFramework.FolderName + "Application.Server/Framework/Framework.Angular/")) { var commandBuild = new CommandBuild(AppCli); UtilCli.OptionSet(ref commandBuild.OptionClientOnly, true); commandBuild.Execute(); } if (optionWatch.OptionGet()) { { ConfigCli configCli = ConfigCli.Load(); Console.WriteLine("Select Website:"); for (int i = 0; i < configCli.WebsiteList.Count; i++) { Console.WriteLine(string.Format("{0}={1}", i + 1, configCli.WebsiteList[i].FolderNameNpmBuild)); } Console.Write("Website: "); var websiteIndex = int.Parse(Console.ReadLine()) - 1; var website = configCli.WebsiteList[websiteIndex]; string folderNameNpmBuilt = UtilFramework.FolderName + website.FolderNameNpmBuild; string folderNameDist = UtilFramework.FolderName + website.FolderNameDist; string folderNameAngular = UtilFramework.FolderName + "Framework/Framework.Angular/application/"; string folderNameCustomComponent = UtilFramework.FolderName + "Application.Website/Shared/CustomComponent/"; Console.WriteLine("Copy folder dist/"); UtilCli.FolderCopy(folderNameDist, folderNameAngular + "src/Application.Website/dist/", "*.*", true); Console.WriteLine("Copy folder CustomComponent/"); UtilCli.FolderCopy(folderNameCustomComponent, folderNameAngular + "src/Application.Website/Shared/CustomComponent/", "*.*", true); bool isWebsiteWatch = UtilCli.ConsoleReadYesNo("Start Website npm watch?"); bool isFileSync = UtilCli.ConsoleReadYesNo("Start Website FileSync (dist/ to Angular)?"); bool isAngular = UtilCli.ConsoleReadYesNo("Start Angular?"); bool isServer = UtilCli.ConsoleReadYesNo("Start Server?"); // FileSync if (isFileSync) { FileSync fileSync = new FileSync(); fileSync.AddFolder(folderNameDist, folderNameAngular + "src/Application.Website/dist/"); fileSync.AddFolder(folderNameAngular + "src/Application.Website/Shared/CustomComponent/", folderNameCustomComponent); } // Website --watch if (isWebsiteWatch) { UtilCli.Npm(folderNameNpmBuilt, "run build -- --watch", isWait: false); } // Angular client if (isAngular) { UtilCli.Npm(folderNameAngular, "start -- --disable-host-check", isWait: false); // disable-host-check to allow for example http://localhost2:4200/ } // .NET Server if (isServer) { string folderName = UtilFramework.FolderName + @"Application.Server/"; UtilCli.DotNet(folderName, "run", isWait: false); } void heartBeat() { Console.WriteLine(); Console.WriteLine(UtilFramework.DateTimeToString(DateTime.Now)); if (isAngular) { UtilCli.ConsoleWriteLineColor("Angular: http://" + website.DomainNameList.First().DomainName + ":4200/", System.ConsoleColor.Green); } if (isServer) { UtilCli.ConsoleWriteLineColor("Server: http://" + website.DomainNameList.First().DomainName + ":50919/", System.ConsoleColor.Green); } if (isFileSync) { UtilCli.ConsoleWriteLineColor("Modify Website: " + folderNameNpmBuilt, System.ConsoleColor.Green); UtilCli.ConsoleWriteLineColor("Modify CustomComponent: " + folderNameCustomComponent, System.ConsoleColor.Green); } if (isAngular) { UtilCli.ConsoleWriteLineColor("Modify Angular: " + folderNameAngular, System.ConsoleColor.Green); } Task.Delay(5000).ContinueWith((Task task) => heartBeat()); } if (isFileSync || isWebsiteWatch || isAngular || isServer) { heartBeat(); while (true) { Console.ReadLine(); // Program would end and with it FileSync } } } } else { string folderName = UtilFramework.FolderName + @"Application.Server/"; UtilCli.VersionBuild(() => { UtilCli.DotNet(folderName, "build"); }); UtilCli.DotNet(folderName, "run --no-build", false); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { UtilCli.OpenWebBrowser("http://localhost:50919/"); // For port setting see also: Application.Server\Properties\launchSettings.json (applicationUrl, sslPort) } if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // Ubuntu list all running processes: 'ps' // To reboot Ubuntu type on Windows command prompt: 'wsl -t Ubuntu-18.04' // Ubuntu show processes tool: 'htop' UtilCli.ConsoleWriteLineColor("Stop server with command 'killall -SIGKILL Application.Server node dotnet'", System.ConsoleColor.Yellow); } } }