diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs index 68817cef07..f8be2a97d6 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/LIbs/InstallLibsService.cs @@ -25,18 +25,17 @@ public class InstallLibsService : IInstallLibsService, ITransientDependency Path.Combine("obj", "debug") }; - public ICmdHelper CmdHelper { get; } + public NpmHelper NpmHelper { get; } public const string LibsDirectory = "./wwwroot/libs"; public ILogger Logger { get; set; } private readonly IJsonSerializer _jsonSerializer; - public InstallLibsService(IJsonSerializer jsonSerializer, ICmdHelper cmdHelper) + public InstallLibsService(IJsonSerializer jsonSerializer, NpmHelper npmHelper) { - CmdHelper = cmdHelper; + NpmHelper = npmHelper; _jsonSerializer = jsonSerializer; - Logger = NullLogger.Instance; } public async Task InstallLibsAsync(string directory) @@ -48,13 +47,13 @@ public class InstallLibsService : IInstallLibsService, ITransientDependency return; } - if (!IsNpmInstalled()) + if (!NpmHelper.IsNpmInstalled()) { Logger.LogWarning("NPM is not installed, visit https://nodejs.org/en/download/ and install NPM"); return; } - if (!IsYarnAvailable()) + if (!NpmHelper.IsYarnAvailable()) { Logger.LogWarning("YARN is not installed, which may cause package inconsistency, please use YARN instead of NPM. visit https://classic.yarnpkg.com/lang/en/docs/install/ and install YARN"); } @@ -72,13 +71,13 @@ public class InstallLibsService : IInstallLibsService, ITransientDependency // angular if (projectPath.EndsWith("angular.json")) { - if (IsYarnAvailable()) + if (NpmHelper.IsYarnAvailable()) { - RunYarn(projectDirectory); + NpmHelper.RunYarn(projectDirectory); } else { - RunNpmInstall(projectDirectory); + NpmHelper.RunNpmInstall(projectDirectory); } } @@ -86,19 +85,19 @@ public class InstallLibsService : IInstallLibsService, ITransientDependency if (projectPath.EndsWith(".csproj")) { var packageJsonFilePath = Path.Combine(Path.GetDirectoryName(projectPath), "package.json"); - + if (!File.Exists(packageJsonFilePath)) { continue; } - - if (IsYarnAvailable()) + + if (NpmHelper.IsYarnAvailable()) { - RunYarn(projectDirectory); + NpmHelper.RunYarn(projectDirectory); } else { - RunNpmInstall(projectDirectory); + NpmHelper.RunNpmInstall(projectDirectory); } await CleanAndCopyResources(projectDirectory); @@ -244,31 +243,4 @@ public class InstallLibsService : IInstallLibsService, ITransientDependency return pattern; } - - private void RunNpmInstall(string directory) - { - Logger.LogInformation($"Running npm install on {directory}"); - CmdHelper.RunCmd($"npm install", directory); - } - - private void RunYarn(string directory) - { - Logger.LogInformation($"Running Yarn on {directory}"); - CmdHelper.RunCmd($"yarn", directory); - } - - private bool IsNpmInstalled() - { - var output = CmdHelper.RunCmdAndGetOutput("npm -v").Trim(); - return SemanticVersion.TryParse(output, out _); - } - - private bool IsYarnAvailable() - { - var output = CmdHelper.RunCmdAndGetOutput("yarn -v").Trim(); - if (!SemanticVersion.TryParse(output, out var version)){ - return false; - } - return version > SemanticVersion.Parse("1.20.0"); - } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmGlobalPackagesChecker.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmGlobalPackagesChecker.cs index 7fe21c96f3..acd74b3f89 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmGlobalPackagesChecker.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmGlobalPackagesChecker.cs @@ -7,34 +7,22 @@ namespace Volo.Abp.Cli.ProjectModification; public class NpmGlobalPackagesChecker : ITransientDependency { - public ICmdHelper CmdHelper { get; } + public NpmHelper NpmHelper { get; } public ILogger Logger { get; set; } - public NpmGlobalPackagesChecker(ICmdHelper cmdHelper) + public NpmGlobalPackagesChecker(NpmHelper npmHelper) { - CmdHelper = cmdHelper; + NpmHelper = npmHelper; Logger = NullLogger.Instance; } public void Check() { - var installedNpmPackages = GetInstalledNpmPackages(); + var installedNpmPackages = NpmHelper.GetInstalledNpmPackages(); if (!installedNpmPackages.Contains(" yarn@")) { - InstallYarn(); + NpmHelper.InstallYarn(); } } - - protected virtual string GetInstalledNpmPackages() - { - Logger.LogInformation("Checking installed npm global packages..."); - return CmdHelper.RunCmdAndGetOutput("npm list -g --depth 0 --silent", out int exitCode); - } - - protected virtual void InstallYarn() - { - Logger.LogInformation("Installing yarn..."); - CmdHelper.RunCmd("npm install yarn -g"); - } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ThemePackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ThemePackageAdder.cs index 4bacce9d7f..db5fdecfce 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ThemePackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ThemePackageAdder.cs @@ -10,12 +10,12 @@ namespace Volo.Abp.Cli.ProjectModification; public class ThemePackageAdder : ITransientDependency { - protected ICmdHelper CmdHelper { get; } + protected NpmHelper NpmHelper { get; } protected PackageJsonFileFinder PackageJsonFileFinder { get; } - public ThemePackageAdder(ICmdHelper cmdHelper, PackageJsonFileFinder packageJsonFileFinder) + public ThemePackageAdder(NpmHelper npmHelper, PackageJsonFileFinder packageJsonFileFinder) { - CmdHelper = cmdHelper; + NpmHelper = npmHelper; PackageJsonFileFinder = packageJsonFileFinder; } @@ -24,7 +24,7 @@ public class ThemePackageAdder : ITransientDependency var packageJsonFilePaths = PackageJsonFileFinder.Find(rootDirectory) .Where(x => !File.Exists(x.RemovePostFix("package.json") + "angular.json")) .ToList(); - + AddPackage(packageJsonFilePaths, package, version); } @@ -43,20 +43,19 @@ public class ThemePackageAdder : ITransientDependency { return; } - - var installCommand = IsYarnAvailable() ? "yarn add " : "npm install "; - var packageVersion = !string.IsNullOrWhiteSpace(version) ? $"@{version}" : string.Empty; + var yarnAvailable = NpmHelper.IsYarnAvailable(); foreach (var packageJsonFilePath in packageJsonFilePaths) { var directory = Path.GetDirectoryName(packageJsonFilePath).EnsureEndsWith(Path.DirectorySeparatorChar); - CmdHelper.RunCmd(installCommand + package + packageVersion, workingDirectory: directory); + if (yarnAvailable) + { + NpmHelper.YarnAddPackage(package, version, directory); + } + else + { + NpmHelper.NpmInstallPackage(package, version, directory); + } } } - - private bool IsYarnAvailable() - { - var output = CmdHelper.RunCmdAndGetOutput("yarn -v").Trim(); - return SemanticVersion.TryParse(output, out _); - } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NpmHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NpmHelper.cs new file mode 100644 index 0000000000..8923d2ebae --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NpmHelper.cs @@ -0,0 +1,69 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using NuGet.Versioning; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.Utils; + +public class NpmHelper : ITransientDependency +{ + protected ICmdHelper CmdHelper { get; } + public ILogger Logger { get; set; } + + public NpmHelper(ICmdHelper cmdHelper) + { + CmdHelper = cmdHelper; + Logger = NullLogger.Instance; + } + + public bool IsNpmInstalled() + { + var output = CmdHelper.RunCmdAndGetOutput("npm -v").Trim(); + return SemanticVersion.TryParse(output, out _); + } + + public bool IsYarnAvailable() + { + var output = CmdHelper.RunCmdAndGetOutput("yarn -v").Trim(); + if (!SemanticVersion.TryParse(output, out var version)){ + return false; + } + return version > SemanticVersion.Parse("1.20.0"); + } + + public void RunNpmInstall(string directory) + { + Logger.LogInformation($"Running npm install on {directory}"); + CmdHelper.RunCmd($"npm install", directory); + } + + public void RunYarn(string directory) + { + Logger.LogInformation($"Running Yarn on {directory}"); + CmdHelper.RunCmd($"yarn", directory); + } + + public void NpmInstallPackage(string package, string version, string directory) + { + var packageVersion = !string.IsNullOrWhiteSpace(version) ? $"@{version}" : string.Empty; + CmdHelper.RunCmd("npm install " + package + packageVersion, workingDirectory: directory); + } + + public void YarnAddPackage(string package, string version, string directory) + { + var packageVersion = !string.IsNullOrWhiteSpace(version) ? $"@{version}" : string.Empty; + CmdHelper.RunCmd("yarn add " + package + packageVersion, workingDirectory: directory); + } + + public string GetInstalledNpmPackages() + { + Logger.LogInformation("Checking installed npm global packages..."); + return CmdHelper.RunCmdAndGetOutput("npm list -g --depth 0 --silent", out int exitCode); + } + + public void InstallYarn() + { + Logger.LogInformation("Installing yarn..."); + CmdHelper.RunCmd("npm install yarn -g"); + } +}