summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/args/mod.rs12
-rw-r--r--cli/cache/deno_dir.rs4
-rw-r--r--cli/cache/mod.rs1
-rw-r--r--tests/specs/npm/npmrc_homedir/.npmrc4
-rw-r--r--tests/specs/npm/npmrc_homedir/__test__.jsonc11
-rw-r--r--tests/specs/npm/npmrc_homedir/install.out9
-rw-r--r--tests/specs/npm/npmrc_homedir/subdir/main.js8
-rw-r--r--tests/specs/npm/npmrc_homedir/subdir/package.json8
-rw-r--r--tests/util/server/src/builders.rs2
9 files changed, 57 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;
diff --git a/tests/specs/npm/npmrc_homedir/.npmrc b/tests/specs/npm/npmrc_homedir/.npmrc
new file mode 100644
index 000000000..13552ad61
--- /dev/null
+++ b/tests/specs/npm/npmrc_homedir/.npmrc
@@ -0,0 +1,4 @@
+@denotest:registry=http://localhost:4261/
+//localhost:4261/:_authToken=private-reg-token
+@denotest2:registry=http://localhost:4262/
+//localhost:4262/:_authToken=private-reg-token2
diff --git a/tests/specs/npm/npmrc_homedir/__test__.jsonc b/tests/specs/npm/npmrc_homedir/__test__.jsonc
new file mode 100644
index 000000000..26fce7fd8
--- /dev/null
+++ b/tests/specs/npm/npmrc_homedir/__test__.jsonc
@@ -0,0 +1,11 @@
+{
+ "if": "unix",
+ "tempDir": true,
+ "envs": {
+ "DENO_FUTURE": "1",
+ "HOME": "$PWD/../"
+ },
+ "cwd": "subdir",
+ "args": "install",
+ "output": "install.out"
+}
diff --git a/tests/specs/npm/npmrc_homedir/install.out b/tests/specs/npm/npmrc_homedir/install.out
new file mode 100644
index 000000000..5c2ff3562
--- /dev/null
+++ b/tests/specs/npm/npmrc_homedir/install.out
@@ -0,0 +1,9 @@
+⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
+[UNORDERED_START]
+Download http://localhost:4261/@denotest/basic
+Download http://localhost:4262/@denotest2/basic
+Download http://localhost:4261/@denotest/basic/1.0.0.tgz
+Download http://localhost:4262/@denotest2/basic/1.0.0.tgz
+Initialize @denotest2/basic@1.0.0
+Initialize @denotest/basic@1.0.0
+[UNORDERED_END]
diff --git a/tests/specs/npm/npmrc_homedir/subdir/main.js b/tests/specs/npm/npmrc_homedir/subdir/main.js
new file mode 100644
index 000000000..66b393636
--- /dev/null
+++ b/tests/specs/npm/npmrc_homedir/subdir/main.js
@@ -0,0 +1,8 @@
+import { getValue, setValue } from "@denotest/basic";
+import * as test from "@denotest2/basic";
+
+console.log(getValue());
+setValue(42);
+console.log(getValue());
+
+console.log(test.getValue());
diff --git a/tests/specs/npm/npmrc_homedir/subdir/package.json b/tests/specs/npm/npmrc_homedir/subdir/package.json
new file mode 100644
index 000000000..274d1ed7f
--- /dev/null
+++ b/tests/specs/npm/npmrc_homedir/subdir/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "npmrc_test",
+ "version": "0.0.1",
+ "dependencies": {
+ "@denotest/basic": "1.0.0",
+ "@denotest2/basic": "1.0.0"
+ }
+}
diff --git a/tests/util/server/src/builders.rs b/tests/util/server/src/builders.rs
index 58563bd03..4130a44e7 100644
--- a/tests/util/server/src/builders.rs
+++ b/tests/util/server/src/builders.rs
@@ -32,6 +32,7 @@ use crate::npm_registry_unset_url;
use crate::pty::Pty;
use crate::strip_ansi_codes;
use crate::testdata_path;
+use crate::tests_path;
use crate::HttpServerGuard;
use crate::TempDir;
@@ -837,6 +838,7 @@ impl TestCommandBuilder {
text
.replace("$DENO_DIR", &self.deno_dir.path().to_string_lossy())
.replace("$TESTDATA", &testdata_path().to_string_lossy())
+ .replace("$TESTS", &tests_path().to_string_lossy())
.replace("$PWD", &cwd.to_string_lossy())
}
}