/// <summary> /// Build all layout Websites. For example: "Application.Website/LayoutDefault" /// </summary> private void BuildWebsite() { var configCli = ConfigCli.Load(); // Ensure FolderNameNpmBuild is defined once only in ConfigCli.json. ConfigCliWebsite configCliWebsite = configCli.WebsiteList.GroupBy(item => item.FolderNameNpmBuild.ToLower()).Where(group => group.Count() > 1).FirstOrDefault()?.FirstOrDefault(); UtilFramework.Assert(configCliWebsite == null, string.Format("ConfigCli.json Website defined more than once. Use DomainNameList instead! (FolderNameNpmBuild={0})", configCliWebsite?.FolderNameNpmBuild)); // Delete folder Application.Server/Framework/Application.Website/ string folderNameApplicationWebsite = UtilFramework.FolderName + "Application.Server/Framework/Application.Website/"; UtilCli.FolderDelete(folderNameApplicationWebsite); foreach (var website in configCli.WebsiteList) { Console.WriteLine(string.Format("### Build Website (Begin) - {0}", website.DomainNameListToString())); // Delete dist folder string folderNameDist = UtilFramework.FolderNameParse(website.FolderNameDist); UtilFramework.Assert(folderNameDist != null); UtilCli.FolderDelete(folderNameDist); // npm run build BuildWebsiteNpm(website); string folderNameServer = UtilFramework.FolderNameParse("Application.Server/Framework/" + website.FolderNameDist); UtilFramework.Assert(folderNameServer != null, "FolderNameServer can not be null!"); UtilFramework.Assert(folderNameServer.StartsWith("Application.Server/Framework/Application.Website/"), "FolderNameServer has to start with 'Application.Server/Framework/Application.Website/'!"); // Copy dist folder string folderNameSource = UtilFramework.FolderName + folderNameDist; string folderNameDest = UtilFramework.FolderName + folderNameServer; if (!UtilCli.FolderNameExist(folderNameSource)) { throw new Exception(string.Format("Folder does not exist! ({0})", folderNameDest)); } // Layout file main.js and Angular file main.js // Prevent for example two main.js. Angular js can not be overridden by layout Website // Application.Website/LayoutDefault/dist/main.js // Application.Server/Framework/Framework.Angular/browser/main.js var fileNameList = new string[] { "runtime.js", "polyfills.js", "main.js" }; foreach (var fileName in fileNameList) { var fileNameFull = folderNameSource + fileName; if (File.Exists(fileNameFull)) { throw new Exception(string.Format("File conflicts with Angular! See also: https://webpack.js.org/configuration/output/ ({0})", fileNameFull)); } } UtilCli.FolderDelete(folderNameDest); UtilFramework.Assert(!UtilCli.FolderNameExist(folderNameDest)); UtilCli.FolderCopy(folderNameSource, folderNameDest, "*.*", true); UtilFramework.Assert(UtilCli.FolderNameExist(folderNameDest)); Console.WriteLine(string.Format("### Build Website (End) - {0}", website.DomainNameListToString())); } }
/// <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 all layout Websites. For example: "Application.Website/LayoutDefault" /// </summary> private void BuildWebsite() { var configCli = ConfigCli.Load(); // Ensure FolderNameNpmBuild is defined once only in ConfigCli.json. ConfigCliWebsite configCliWebsite = configCli.WebsiteList.GroupBy(item => item.FolderNameNpmBuild.ToLower()).Where(group => group.Count() > 1).FirstOrDefault()?.FirstOrDefault(); UtilFramework.Assert(configCliWebsite == null, string.Format("ConfigCli.json Website defined more than once. Use DomainNameList instead! (FolderNameNpmBuild={0})", configCliWebsite?.FolderNameNpmBuild)); // Delete folder Application.Server/Framework/Application.Website/ string folderNameApplicationWebsite = UtilFramework.FolderName + "Application.Server/Framework/Application.Website/"; UtilCli.FolderDelete(folderNameApplicationWebsite); foreach (var website in configCli.WebsiteList) { Console.WriteLine(string.Format("### Build Website (Begin) - {0}", website.DomainNameListToString())); // Delete dist folder string folderNameDist = UtilFramework.FolderNameParse(website.FolderNameDist); UtilFramework.Assert(folderNameDist != null); UtilCli.FolderDelete(folderNameDist); // npm run build BuildWebsiteNpm(website); string folderNameServer = UtilFramework.FolderNameParse(website.FolderNameServerGet(configCli)); UtilFramework.Assert(folderNameServer != null, "FolderNameServer can not be null!"); UtilFramework.Assert(folderNameServer.StartsWith("Application.Server/Framework/Application.Website/"), "FolderNameServer has to start with 'Application.Server/Framework/Application.Website/'!"); // Copy dist folder string folderNameSource = UtilFramework.FolderName + folderNameDist; string folderNameDest = UtilFramework.FolderName + folderNameServer; if (!UtilCli.FolderNameExist(folderNameSource)) { throw new Exception(string.Format("Folder does not exist! ({0})", folderNameDest)); } UtilCli.FolderDelete(folderNameDest); UtilFramework.Assert(!UtilCli.FolderNameExist(folderNameDest)); UtilCli.FolderCopy(folderNameSource, folderNameDest, "*.*", true); UtilFramework.Assert(UtilCli.FolderNameExist(folderNameDest)); Console.WriteLine(string.Format("### Build Website (End) - {0}", website.DomainNameListToString())); } }
private void ArgumentWebsite() { ConfigCli configCli = ConfigCli.Load(); // Input DomainName Console.WriteLine("Enter domain name. For example: 'example.com' or empty for default website:"); Console.Write(">"); string domainName = Console.ReadLine(); // Input AppTypeName Console.WriteLine("Enter AppTypeName. For example: 'Application.AppMain, Application':"); Console.Write(">"); string appTypeName = Console.ReadLine(); if (Type.GetType(appTypeName) == null) { UtilCli.ConsoleWriteLineColor(string.Format("Type not found! ({0})", appTypeName), ConsoleColor.Yellow); } // Input FolderName Console.WriteLine("Enter npm build folder name. Or empty if no build. For example: 'Application.Website/LayoutDefault/'. In this folder ci calls npm install; npm build;"); Console.Write(">"); string folderNameNpmBuild = Console.ReadLine(); folderNameNpmBuild = UtilFramework.FolderNameParse(folderNameNpmBuild); string folderNameNpmBuildCheck = UtilFramework.FolderName + folderNameNpmBuild; if (!Directory.Exists(folderNameNpmBuildCheck)) { UtilCli.ConsoleWriteLineColor(string.Format("Folder does not exist! ({0})", folderNameNpmBuild), ConsoleColor.Yellow); } // Input FolderNameDist Console.WriteLine("Enter dist folder name. For example 'Application.Website/LayoutDefault/dist/'. Content of this folder is copied to FolderNameServer"); Console.Write(">"); string folderNameDist = Console.ReadLine(); folderNameDist = UtilFramework.FolderNameParse(folderNameDist); string folderNameDistCheck = UtilFramework.FolderName + folderNameDist; if (!Directory.Exists(folderNameDistCheck)) { UtilCli.ConsoleWriteLineColor(string.Format("Folder does not exist! ({0})", folderNameDist), ConsoleColor.Yellow); } // Add Website ConfigCliWebsite website = new ConfigCliWebsite(); website.DomainNameList = new List <ConfigCliWebsiteDomain>(); website.DomainNameList.Add(new ConfigCliWebsiteDomain() { EnvironmentName = configCli.EnvironmentNameGet(), DomainName = domainName, AppTypeName = appTypeName }); website.FolderNameNpmBuild = folderNameNpmBuild; website.FolderNameDist = folderNameDist; configCli.WebsiteList.Add(website); ConfigCli.Save(configCli); }