diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 7c477da368..051f3e3abc 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -104,7 +104,6 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien await CheckCreatedRequirements(projectArgs); - ConfigureNpmPackagesForTheme(projectArgs); await CreateOpenIddictPfxFilesAsync(projectArgs); await RunGraphBuildForMicroserviceServiceTemplate(projectArgs); await CreateInitialMigrationsAsync(projectArgs); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 09642f38c6..a941438bc3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -720,67 +720,6 @@ public abstract class ProjectCreationCommandBase }; } - protected void ConfigureNpmPackagesForTheme(ProjectBuildArgs projectArgs) - { - if (!projectArgs.Theme.HasValue) - { - return; - } - - switch (projectArgs.Theme) - { - case Theme.Basic: - ConfigureNpmPackagesForBasicTheme(projectArgs); - break; - case Theme.Lepton: - ConfigureNpmPackagesForLeptonTheme(projectArgs); - break; - case Theme.NotSpecified: - case Theme.LeptonXLite: - case Theme.LeptonX: - break; - default: - throw new CliUsageException(ExceptionMessageHelper.GetInvalidOptionExceptionMessage(Options.Theme.Long)); - } - } - - private void ConfigureNpmPackagesForBasicTheme(ProjectBuildArgs projectArgs) - { - if (projectArgs.UiFramework is not UiFramework.None or UiFramework.Angular) - { - ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@abp/aspnetcore.mvc.ui.theme.basic", projectArgs.Version); - } - - if (projectArgs.UiFramework is UiFramework.BlazorServer) - { - ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@abp/aspnetcore.components.server.basictheme", projectArgs.Version); - } - - if (projectArgs.UiFramework is UiFramework.Angular) - { - ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@abp/ng.theme.basic", projectArgs.Version); - } - } - - private void ConfigureNpmPackagesForLeptonTheme(ProjectBuildArgs projectArgs) - { - if (projectArgs.UiFramework is not UiFramework.None or UiFramework.Angular) - { - ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.mvc.ui.theme.lepton", projectArgs.Version); - } - - if (projectArgs.UiFramework is UiFramework.BlazorServer) - { - ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.components.server.leptontheme", projectArgs.Version); - ThemePackageAdder.AddNpmPackage(projectArgs.OutputFolder, "@volo/abp.aspnetcore.mvc.ui.theme.lepton", projectArgs.Version); - } - - if (projectArgs.UiFramework is UiFramework.Angular) - { - ThemePackageAdder.AddAngularPackage(projectArgs.OutputFolder, "@volo/abp.ng.theme.lepton", projectArgs.Version); - } - } - protected void ConfigureAngularJsonForThemeSelection(ProjectBuildArgs projectArgs) { if (projectArgs.TemplateName == ModuleTemplate.TemplateName) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceDependencyFromPackageJsonFileStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceDependencyFromPackageJsonFileStep.cs new file mode 100644 index 0000000000..e8755a7bdd --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceDependencyFromPackageJsonFileStep.cs @@ -0,0 +1,51 @@ +using System.Linq; +using System.Text.RegularExpressions; + +namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps; + +public class ReplaceDependencyFromPackageJsonFileStep : ProjectBuildPipelineStep +{ + private readonly string _packageJsonFilePath; + private readonly string _packageName; + private readonly string _newPackageName; + private readonly string _newPackageVersion; + + public ReplaceDependencyFromPackageJsonFileStep(string packageJsonFilePath, string packageName, string newPackageName, string newPackageVersion) + { + _packageJsonFilePath = packageJsonFilePath; + _packageName = packageName; + _newPackageName = newPackageName; + _newPackageVersion = newPackageVersion; + } + + public override void Execute(ProjectBuildContext context) + { + var packageJsonFile = context.Files.FirstOrDefault(f => f.Name.Contains(_packageJsonFilePath) && !f.Name.Contains("node_modules")); + if (packageJsonFile == null) + { + return; + } + + var lines = packageJsonFile.GetLines(); + for (var i = 0; i < lines.Length; i++) + { + if (lines[i].Contains(_packageName)) + { + if (_newPackageVersion == null) + { + lines[i] = lines[i].Replace(_packageName, _newPackageName); + } + else + { + var space = Regex.Match(lines[i], @"\s+").Value; + var hasComma = lines[i].Contains(",") ? "," : ""; + var caret = lines[i].Contains("^"); + var tilde = lines[i].Contains("~"); + var prefix = caret ? "^" : tilde ? "~" : ""; + lines[i] = $"{space}\"{_newPackageName}\": \"{prefix}{_newPackageVersion}\"{hasComma}"; + } + } + } + packageJsonFile.SetLines(lines); + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs index 8b9df09ca5..ab146d6abe 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppNoLayersTemplateBase.cs @@ -22,7 +22,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo public override IEnumerable GetCustomSteps(ProjectBuildContext context) { var steps = base.GetCustomSteps(context).ToList(); - + SwitchDatabaseProvider(context, steps); DeleteUnrelatedProjects(context, steps); RemoveMigrations(context, steps); @@ -130,7 +130,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo throw new AbpException("Unkown UI framework: " + context.BuildArgs.UiFramework); } } - + protected void RandomizeSslPorts(ProjectBuildContext context, List steps) { if (context.BuildArgs.ExtraProperties.ContainsKey("no-random-port")) @@ -157,7 +157,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo ) ); } - + protected void CleanupFolderHierarchy(ProjectBuildContext context, List steps) { if (context.BuildArgs.UiFramework != UiFramework.Angular) @@ -165,7 +165,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo steps.Add(new MoveFolderStep("/aspnet-core/", "/")); } } - + protected void RemoveMigrations(ProjectBuildContext context, List steps) { steps.Add(new RemoveFolderStep("/aspnet-core/MyCompanyName.MyProjectName/Migrations")); @@ -202,12 +202,12 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo break; } } - + protected void RandomizeStringEncryption(ProjectBuildContext context, List steps) { steps.Add(new RandomizeStringEncryptionStep()); } - + protected static void RandomizeAuthServerPassPhrase(ProjectBuildContext context, List steps) { steps.Add(new RandomizeAuthServerPassPhraseStep()); @@ -217,7 +217,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo { steps.Add(new UpdateNuGetConfigStep("/aspnet-core/NuGet.Config")); } - + protected void ChangeConnectionString(ProjectBuildContext context, List steps) { if (context.BuildArgs.ConnectionString != null) @@ -230,7 +230,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo steps.Add(new ConnectionStringRenameStep()); } } - + protected void ConfigureTheme(ProjectBuildContext context, List steps) { if (!context.BuildArgs.Theme.HasValue) @@ -256,9 +256,9 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo } steps.Add(new ChangeThemeStep()); - RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework); + ReplaceLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework, theme: context.BuildArgs.Theme, version: context.BuildArgs.Version ?? context.TemplateFile.Version); } - + private static void RemoveBlazorWasmProjects(List steps) { steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor.WebAssembly.Server", @@ -269,7 +269,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo projectFolderPath: "/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared")); steps.Add(new RemoveFolderStep("/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly")); } - + private void RemoveThemeLogoFolders(ProjectBuildContext context, List steps) { if (context.BuildArgs.Theme != Theme.Lepton && IsPro()) @@ -282,7 +282,7 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo steps.Add(new RemoveFilesStep("/wwwroot/images/logo/leptonx/")); } } - + protected void SetDbmsSymbols(ProjectBuildContext context) { switch (context.BuildArgs.DatabaseManagementSystem) @@ -324,9 +324,21 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo return templateThemes.TryGetValue(args.TemplateName!, out var templateTheme) && templateTheme == args.Theme; } - private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List steps, bool isProTemplate, UiFramework uiFramework) + private static void ReplaceLeptonXThemePackagesFromPackageJsonFiles(List steps, bool isProTemplate, UiFramework uiFramework, Theme? theme, string version) { var mvcUiPackageName = isProTemplate ? "@volo/abp.aspnetcore.mvc.ui.theme.leptonx" : "@abp/aspnetcore.mvc.ui.theme.leptonxlite"; + var newMvcUiPackageName = theme switch + { + Theme.Basic => "@abp/aspnetcore.mvc.ui.theme.basic", + Theme.Lepton => "@volo/abp.aspnetcore.mvc.ui.theme.lepton", + Theme.LeptonXLite => "@abp/aspnetcore.mvc.ui.theme.leptonxlite", + Theme.LeptonX => "@volo/abp.aspnetcore.mvc.ui.theme.leptonx", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; + if (theme == Theme.LeptonX || theme == Theme.LeptonXLite) + { + version = null; + } var packageJsonFilePaths = new List { "/MyCompanyName.MyProjectName.Web/package.json", @@ -338,12 +350,20 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo foreach (var packageJsonFilePath in packageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version)); } if (uiFramework == UiFramework.BlazorServer) { var blazorServerUiPackageName = isProTemplate ? "@volo/aspnetcore.components.server.leptonxtheme" : "@abp/aspnetcore.components.server.leptonxlitetheme"; + var newBlazorServerUiPackageName = theme switch + { + Theme.Basic => "@abp/aspnetcore.components.server.basictheme", + Theme.Lepton => "@volo/abp.aspnetcore.components.server.leptontheme", + Theme.LeptonXLite => "@abp/aspnetcore.components.server.leptonxlitetheme", + Theme.LeptonX => "@volo/aspnetcore.components.server.leptonxtheme", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; var blazorServerPackageJsonFilePaths = new List { "/MyCompanyName.MyProjectName/package.json", @@ -353,13 +373,21 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName)); - steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName, newBlazorServerUiPackageName, version)); } } else if (uiFramework == UiFramework.Angular) { var ngUiPackageName = isProTemplate ? "@volosoft/abp.ng.theme.lepton-x" : "@abp/ng.theme.lepton-x"; + var newNgUiPackageName = theme switch + { + Theme.Basic => "@abp/ng.theme.basic", + Theme.Lepton => "@volo/abp.ng.theme.lepton", + Theme.LeptonXLite => "@abp/ng.theme.lepton-x", + Theme.LeptonX => "@volosoft/abp.ng.theme.lepton-x", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; var angularPackageJsonFilePaths = new List { "/angular/package.json" @@ -367,8 +395,11 @@ public abstract class AppNoLayersTemplateBase : TemplateInfo foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName)); - steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName, newNgUiPackageName, version)); + if (theme == Theme.Basic || theme == Theme.Lepton) + { + steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); + } } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index 1e849c05ef..95c1b27353 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -232,7 +232,7 @@ public abstract class AppTemplateBase : TemplateInfo } steps.Add(new ChangeThemeStep()); - RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework); + ReplaceLeptonXThemePackagesFromPackageJsonFiles(steps, isProTemplate: IsPro(), uiFramework: context.BuildArgs.UiFramework, theme: context.BuildArgs.Theme, version: context.BuildArgs.Version ?? context.TemplateFile.Version); } protected void SetDbmsSymbols(ProjectBuildContext context) @@ -264,7 +264,7 @@ public abstract class AppTemplateBase : TemplateInfo throw new AbpException("Unknown Dbms: " + context.BuildArgs.DatabaseManagementSystem); } } - + private void RemoveThemeLogoFolders(ProjectBuildContext context, List steps) { if (context.BuildArgs.Theme != Theme.Lepton && IsPro()) @@ -289,9 +289,21 @@ public abstract class AppTemplateBase : TemplateInfo return templateThemes.TryGetValue(args.TemplateName!, out var templateTheme) && templateTheme == args.Theme; } - private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List steps, bool isProTemplate, UiFramework uiFramework) + private static void ReplaceLeptonXThemePackagesFromPackageJsonFiles(List steps, bool isProTemplate, UiFramework uiFramework, Theme? theme, string version) { var mvcUiPackageName = isProTemplate ? "@volo/abp.aspnetcore.mvc.ui.theme.leptonx" : "@abp/aspnetcore.mvc.ui.theme.leptonxlite"; + var newMvcUiPackageName = theme switch + { + Theme.Basic => "@abp/aspnetcore.mvc.ui.theme.basic", + Theme.Lepton => "@volo/abp.aspnetcore.mvc.ui.theme.lepton", + Theme.LeptonXLite => "@abp/aspnetcore.mvc.ui.theme.leptonxlite", + Theme.LeptonX => "@volo/abp.aspnetcore.mvc.ui.theme.leptonx", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; + if (theme == Theme.LeptonX || theme == Theme.LeptonXLite) + { + version = null; + } var packageJsonFilePaths = new List { "/MyCompanyName.MyProjectName.Web/package.json", @@ -306,12 +318,20 @@ public abstract class AppTemplateBase : TemplateInfo foreach (var packageJsonFilePath in packageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version)); } if (uiFramework == UiFramework.BlazorServer) { var blazorServerUiPackageName = isProTemplate ? "@volo/aspnetcore.components.server.leptonxtheme" : "@abp/aspnetcore.components.server.leptonxlitetheme"; + var newBlazorServerUiPackageName = theme switch + { + Theme.Basic => "@abp/aspnetcore.components.server.basictheme", + Theme.Lepton => "@volo/abp.aspnetcore.components.server.leptontheme", + Theme.LeptonXLite => "@abp/aspnetcore.components.server.leptonxlitetheme", + Theme.LeptonX => "@volo/aspnetcore.components.server.leptonxtheme", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; var blazorServerPackageJsonFilePaths = new List { "/MyCompanyName.MyProjectName.Blazor/package.json", @@ -320,13 +340,21 @@ public abstract class AppTemplateBase : TemplateInfo foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName)); - steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName, newBlazorServerUiPackageName, version)); } } else if (uiFramework == UiFramework.Angular) { var ngUiPackageName = isProTemplate ? "@volosoft/abp.ng.theme.lepton-x" : "@abp/ng.theme.lepton-x"; + var newNgUiPackageName = theme switch + { + Theme.Basic => "@abp/ng.theme.basic", + Theme.Lepton => "@volo/abp.ng.theme.lepton", + Theme.LeptonXLite => "@abp/ng.theme.lepton-x", + Theme.LeptonX => "@volosoft/abp.ng.theme.lepton-x", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; var angularPackageJsonFilePaths = new List { "/angular/package.json" @@ -334,8 +362,11 @@ public abstract class AppTemplateBase : TemplateInfo foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName)); - steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName, newNgUiPackageName, version)); + if (theme == Theme.Basic || theme == Theme.Lepton) + { + steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); + } } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs index cb7722da10..a1936f9c6b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Microservice/MicroserviceTemplateBase.cs @@ -51,12 +51,24 @@ public abstract class MicroserviceTemplateBase : TemplateInfo } steps.Add(new ChangeThemeStep()); - RemoveLeptonXThemePackagesFromPackageJsonFiles(steps, uiFramework: context.BuildArgs.UiFramework); + ReplaceLeptonXThemePackagesFromPackageJsonFiles(steps, uiFramework: context.BuildArgs.UiFramework, theme: context.BuildArgs.Theme, version: context.BuildArgs.Version ?? context.TemplateFile.Version); } - private static void RemoveLeptonXThemePackagesFromPackageJsonFiles(List steps, UiFramework uiFramework) + private static void ReplaceLeptonXThemePackagesFromPackageJsonFiles(List steps, UiFramework uiFramework, Theme? theme, string version) { var mvcUiPackageName = "@volo/abp.aspnetcore.mvc.ui.theme.leptonx"; + var newMvcUiPackageName = theme switch + { + Theme.Basic => "@abp/aspnetcore.mvc.ui.theme.basic", + Theme.Lepton => "@volo/abp.aspnetcore.mvc.ui.theme.lepton", + Theme.LeptonXLite => "@abp/aspnetcore.mvc.ui.theme.leptonxlite", + Theme.LeptonX => "@volo/abp.aspnetcore.mvc.ui.theme.leptonx", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; + if (theme == Theme.LeptonX || theme == Theme.LeptonXLite) + { + version = null; + } var packageJsonFilePaths = new List { "/MyCompanyName.MyProjectName.AuthServer/package.json", @@ -65,12 +77,20 @@ public abstract class MicroserviceTemplateBase : TemplateInfo foreach (var packageJsonFilePath in packageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(packageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version)); } if (uiFramework == UiFramework.BlazorServer) { var blazorServerUiPackageName = "@volo/aspnetcore.components.server.leptonxtheme"; + var newBlazorServerUiPackageName = theme switch + { + Theme.Basic => "@abp/aspnetcore.components.server.basictheme", + Theme.Lepton => "@volo/abp.aspnetcore.components.server.leptontheme", + Theme.LeptonXLite => "@abp/aspnetcore.components.server.leptonxlitetheme", + Theme.LeptonX => "@volo/aspnetcore.components.server.leptonxtheme", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; var blazorServerPackageJsonFilePaths = new List { "/MyCompanyName.MyProjectName.Blazor/package.json" @@ -78,13 +98,21 @@ public abstract class MicroserviceTemplateBase : TemplateInfo foreach (var blazorServerPackageJsonFilePath in blazorServerPackageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName)); - steps.Add(new RemoveDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, mvcUiPackageName, newMvcUiPackageName, version)); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(blazorServerPackageJsonFilePath, blazorServerUiPackageName, newBlazorServerUiPackageName, version)); } } else if (uiFramework == UiFramework.Angular) { var ngUiPackageName = "@volosoft/abp.ng.theme.lepton-x"; + var newNgUiPackageName = theme switch + { + Theme.Basic => "@abp/ng.theme.basic", + Theme.Lepton => "@volo/abp.ng.theme.lepton", + Theme.LeptonXLite => "@abp/ng.theme.lepton-x", + Theme.LeptonX => "@volosoft/abp.ng.theme.lepton-x", + _ => throw new AbpException("Unknown theme: " + theme?.ToString()) + }; var angularPackageJsonFilePaths = new List { "/angular/package.json" @@ -92,8 +120,11 @@ public abstract class MicroserviceTemplateBase : TemplateInfo foreach (var angularPackageJsonFilePath in angularPackageJsonFilePaths) { - steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName)); - steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); + steps.Add(new ReplaceDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, ngUiPackageName, newNgUiPackageName, version)); + if (theme == Theme.Basic || theme == Theme.Lepton) + { + steps.Add(new RemoveDependencyFromPackageJsonFileStep(angularPackageJsonFilePath, "bootstrap-icons")); + } } } }