diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-06-26 23:17:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-27 00:17:00 +0200 |
commit | 2a2ff96be13047cb50612fde0f12e5f6df374ad3 (patch) | |
tree | 655ec1d1308db13c1faa917fd02321ee30c85efe /cli | |
parent | 0da01c0ca6b537f74be32126e567bdfc2c73ed16 (diff) |
fix(ext/node): discover .npmrc in user's homedir (#24021)
This commit adds discovery of `.npmrc` files in user's homedir.
This is not a perfect fix as it doesn't merge multiple `.npmrc` files
together as per https://github.com/denoland/deno/issues/23954
but allows to fallback if no `.npmrc` file is discovered in the project
root.
Diffstat (limited to 'cli')
-rw-r--r-- | cli/args/mod.rs | 12 | ||||
-rw-r--r-- | cli/cache/deno_dir.rs | 4 | ||||
-rw-r--r-- | cli/cache/mod.rs | 1 |
3 files changed, 15 insertions, 2 deletions
diff --git a/cli/args/mod.rs b/cli/args/mod.rs index ccf00425b..9e63ce889 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -72,6 +72,7 @@ use std::sync::Arc; use thiserror::Error; use crate::args::import_map::enhance_import_map_value_with_workspace_members; +use crate::cache; use crate::file_fetcher::FileFetcher; use crate::util::fs::canonicalize_path_maybe_not_exists; use crate::version; @@ -592,6 +593,7 @@ pub fn discover_npmrc( Ok(Arc::new(resolved)) } + // 1. Try `.npmrc` next to `package.json` if let Some(package_json_path) = maybe_package_json_path { if let Some(package_json_dir) = package_json_path.parent() { if let Some((source, path)) = try_to_read_npmrc(package_json_dir)? { @@ -600,6 +602,7 @@ pub fn discover_npmrc( } } + // 2. Try `.npmrc` next to `deno.json(c)` if let Some(deno_json_path) = maybe_deno_json_path { if let Some(deno_json_dir) = deno_json_path.parent() { if let Some((source, path)) = try_to_read_npmrc(deno_json_dir)? { @@ -608,6 +611,15 @@ pub fn discover_npmrc( } } + // TODO(bartlomieju): update to read both files - one in the project root and one and + // home dir and then merge them. + // 3. Try `.npmrc` in the user's home directory + if let Some(home_dir) = cache::home_dir() { + if let Some((source, path)) = try_to_read_npmrc(&home_dir)? { + return try_to_parse_npmrc(source, &path).map(|r| (r, Some(path))); + } + } + log::debug!("No .npmrc file found"); Ok((create_default_npmrc(), None)) } diff --git a/cli/cache/deno_dir.rs b/cli/cache/deno_dir.rs index 00df41c5a..05de1cf7c 100644 --- a/cli/cache/deno_dir.rs +++ b/cli/cache/deno_dir.rs @@ -169,7 +169,7 @@ impl DenoDir { /// To avoid the poorly managed dirs crate #[cfg(not(windows))] -mod dirs { +pub mod dirs { use std::path::PathBuf; pub fn cache_dir() -> Option<PathBuf> { @@ -227,7 +227,7 @@ mod dirs { // https://github.com/dirs-dev/dirs-sys-rs/blob/ec7cee0b3e8685573d847f0a0f60aae3d9e07fa2/src/lib.rs#L140-L164 // MIT license. Copyright (c) 2018-2019 dirs-rs contributors #[cfg(windows)] -mod dirs { +pub mod dirs { use std::ffi::OsString; use std::os::windows::ffi::OsStringExt; use std::path::PathBuf; diff --git a/cli/cache/mod.rs b/cli/cache/mod.rs index 64d046c15..3430f74f7 100644 --- a/cli/cache/mod.rs +++ b/cli/cache/mod.rs @@ -43,6 +43,7 @@ pub use caches::Caches; pub use check::TypeCheckCache; pub use code_cache::CodeCache; pub use common::FastInsecureHasher; +pub use deno_dir::dirs::home_dir; pub use deno_dir::DenoDir; pub use deno_dir::DenoDirProvider; pub use disk_cache::DiskCache; |