public static void ExecuteNpmCommand(string args, NpmCommandCallback callback) { if (IsNpmRunning) { throw new InvalidOperationException("Npm instance already running"); } if (WorkingDirectory == null) { throw new InvalidOperationException("WorkingDirectory is null"); } var startInfo = new System.Diagnostics.ProcessStartInfo { Arguments = args, CreateNoWindow = true, FileName = "npm.cmd", RedirectStandardError = true, RedirectStandardOutput = true, UseShellExecute = false, WorkingDirectory = WorkingDirectory, }; var launchProcess = System.Diagnostics.Process.Start(startInfo); if (launchProcess == null || launchProcess.HasExited || launchProcess.Id == 0) { var msg = "No 'npm' executable was found. Please install Npm on your system and restart computer"; Debug.LogError(msg); callback(null, msg); } else { IsNpmRunning = true; Error.Length = 0; Output.Length = 0; launchProcess.OutputDataReceived += (sender, e) => Output.AppendLine(e.Data ?? ""); launchProcess.ErrorDataReceived += (sender, e) => Error.AppendLine(e.Data ?? ""); launchProcess.Exited += (sender, e) => { IsNpmRunning = false; bool success = 0 == launchProcess.ExitCode; if (!success) { var err = Error.ToString(); Debug.LogError($"npm {args}\n\nExitCode: {launchProcess.ExitCode}\n\n{err}"); callback(launchProcess.ExitCode, err); } else { var msg = Output.ToString(); callback(0, msg); } }; launchProcess.BeginOutputReadLine(); launchProcess.BeginErrorReadLine(); launchProcess.EnableRaisingEvents = true; } }
public static void Publish(NpmCommandCallback action, string registry) { if (string.IsNullOrEmpty(registry)) { NpmUtils.ExecuteNpmCommand($"publish ", action); } else { NpmUtils.ExecuteNpmCommand($"publish --registry {registry}", action); } }