Skip to content

Commit

Permalink
fix: npm not found in Command::new
Browse files Browse the repository at this point in the history
  • Loading branch information
pplmx committed Dec 10, 2023
1 parent e999d8e commit 0ada232
Showing 1 changed file with 47 additions and 26 deletions.
73 changes: 47 additions & 26 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,50 +3,71 @@ pub mod proxy_manager {
use std::process::Command;

pub fn enable_proxy(proxy_url: &str) {
set_config("http.proxy", proxy_url);
set_config("https.proxy", proxy_url);
set_env("all_proxy", proxy_url);
set_env("http_proxy", proxy_url);
set_env("https_proxy", proxy_url);
// git config
git_set_config("http.proxy", proxy_url);

// npm config
npm_set_config("proxy", proxy_url);

// export some proxy environment variables
std::env::set_var("all_proxy", proxy_url);
std::env::set_var("http_proxy", proxy_url);
std::env::set_var("https_proxy", proxy_url);
std::env::set_var("no_proxy", "localhost, 127.0.0.1, ::1, .local, .internal, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12");
println!("Proxy enabled");
}

pub fn disable_proxy() {
unset_config("http.proxy");
unset_config("https.proxy");
unset_env("all_proxy");
unset_env("http_proxy");
unset_env("https_proxy");
git_unset_config("http.proxy");

npm_unset_config("proxy");

std::env::remove_var("all_proxy");
std::env::remove_var("http_proxy");
std::env::remove_var("https_proxy");
std::env::remove_var("no_proxy");
println!("Proxy disabled");
}

fn set_config(key: &str, value: &str) {
fn git_set_config(key: &str, value: &str) {
Command::new("git")
.args(&["config", "--global", key, value])
.output()
.expect("Failed to execute command");
Command::new("npm")
.args(&["config", "set", "proxy", value])
.output()
.expect("Failed to execute command");
.ok();
}

fn unset_config(key: &str) {
fn git_unset_config(key: &str) {
Command::new("git")
.args(&["config", "--global", "--unset", key])
.output()
.expect("Failed to execute command");
Command::new("npm")
.args(&["config", "delete", "proxy"])
.output()
.expect("Failed to execute command");
.ok();
}

fn set_env(key: &str, value: &str) {
std::env::set_var(key, value);
fn npm_set_config(key: &str, value: &str) {
if cfg!(target_os = "windows") {
Command::new("npm.cmd")
.args(&["config", "set", key, value])
.output()
.ok();
} else {
Command::new("npm")
.args(&["config", "set", key, value])
.output()
.ok();
}
}

fn unset_env(key: &str) {
std::env::remove_var(key);
fn npm_unset_config(key: &str) {
if cfg!(target_os = "windows") {
Command::new("npm.cmd")
.args(&["config", "delete", key])
.output()
.ok();
} else {
Command::new("npm")
.args(&["config", "delete", key])
.output()
.ok();
}
}
}

0 comments on commit 0ada232

Please sign in to comment.