mirror of https://github.com/abpframework/abp.git
6 changed files with 165 additions and 83 deletions
@ -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); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue