mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 00:29:09 -05:00
fix(npmrc): discovery in cwd when there is no package.json or deno.json
This commit is contained in:
parent
0060e74779
commit
6a93485ae2
9 changed files with 66 additions and 5 deletions
|
@ -518,6 +518,7 @@ fn resolve_lint_rules_options(
|
|||
|
||||
pub fn discover_npmrc_from_workspace(
|
||||
workspace: &Workspace,
|
||||
cwd: Option<&PathBuf>,
|
||||
) -> Result<(Arc<ResolvedNpmRc>, Option<PathBuf>), AnyError> {
|
||||
let root_folder = workspace.root_folder_configs();
|
||||
discover_npmrc(
|
||||
|
@ -529,6 +530,7 @@ pub fn discover_npmrc_from_workspace(
|
|||
None
|
||||
}
|
||||
}),
|
||||
cwd,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -540,6 +542,7 @@ pub fn discover_npmrc_from_workspace(
|
|||
fn discover_npmrc(
|
||||
maybe_package_json_path: Option<PathBuf>,
|
||||
maybe_deno_json_path: Option<PathBuf>,
|
||||
cwd: Option<&PathBuf>,
|
||||
) -> Result<(Arc<ResolvedNpmRc>, Option<PathBuf>), AnyError> {
|
||||
const NPMRC_NAME: &str = ".npmrc";
|
||||
|
||||
|
@ -583,7 +586,7 @@ fn discover_npmrc(
|
|||
}
|
||||
|
||||
// 1. Try `.npmrc` next to `package.json`
|
||||
if let Some(package_json_path) = maybe_package_json_path {
|
||||
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)? {
|
||||
return try_to_parse_npmrc(source, &path).map(|r| (r, Some(path)));
|
||||
|
@ -592,7 +595,7 @@ 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_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)? {
|
||||
return try_to_parse_npmrc(source, &path).map(|r| (r, Some(path)));
|
||||
|
@ -600,9 +603,18 @@ fn discover_npmrc(
|
|||
}
|
||||
}
|
||||
|
||||
// 3. Try `.npmrc` in cwd if no package.json or deno.json(c) was found
|
||||
if let Some(cwd) = cwd {
|
||||
if maybe_package_json_path.is_none() && maybe_deno_json_path.is_none() {
|
||||
if let Some((source, path)) = try_to_read_npmrc(&cwd)? {
|
||||
return try_to_parse_npmrc(source, &path).map(|r| (r, Some(path)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
// 4. Try `.npmrc` in the user's home directory
|
||||
if let Some(home_dir) = cache::home_dir() {
|
||||
match try_to_read_npmrc(&home_dir) {
|
||||
Ok(Some((source, path))) => {
|
||||
|
@ -924,7 +936,8 @@ impl CliOptions {
|
|||
log::warn!("{} {}", colors::yellow("Warning"), diagnostic);
|
||||
}
|
||||
|
||||
let (npmrc, _) = discover_npmrc_from_workspace(&start_dir.workspace)?;
|
||||
let (npmrc, _) =
|
||||
discover_npmrc_from_workspace(&start_dir.workspace, Some(&initial_cwd))?;
|
||||
|
||||
let maybe_lock_file = CliLockfile::discover(&flags, &start_dir.workspace)?;
|
||||
|
||||
|
|
|
@ -1342,7 +1342,7 @@ impl ConfigData {
|
|||
}
|
||||
|
||||
// todo(dsherret): cache this so we don't load this so many times
|
||||
let npmrc = discover_npmrc_from_workspace(&member_dir.workspace)
|
||||
let npmrc = discover_npmrc_from_workspace(&member_dir.workspace, None)
|
||||
.inspect(|(_, path)| {
|
||||
if let Some(path) = path {
|
||||
lsp_log!(" Resolved .npmrc: \"{}\"", path.display());
|
||||
|
|
7
tests/registry/npm-private/@denotest/bin/1.0.0/cli.mjs
Normal file
7
tests/registry/npm-private/@denotest/bin/1.0.0/cli.mjs
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env -S node
|
||||
|
||||
import process from "node:process";
|
||||
|
||||
for (const arg of process.argv.slice(2)) {
|
||||
console.log(arg);
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name": "@denotest/bin",
|
||||
"version": "1.0.0",
|
||||
"bin": "./cli.mjs"
|
||||
}
|
4
tests/specs/npm/npmrc_no_package_json/.npmrc
Normal file
4
tests/specs/npm/npmrc_no_package_json/.npmrc
Normal file
|
@ -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
|
14
tests/specs/npm/npmrc_no_package_json/__test__.jsonc
Normal file
14
tests/specs/npm/npmrc_no_package_json/__test__.jsonc
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"tempDir": true,
|
||||
"tests": {
|
||||
"run_script_with_npm_with_no_project": {
|
||||
"args": "run -A main.js",
|
||||
"output": "main.out"
|
||||
},
|
||||
|
||||
"run_npm_with_no_project": {
|
||||
"args": "run -A npm:@denotest/bin deno",
|
||||
"output": "direct.out"
|
||||
}
|
||||
}
|
||||
}
|
3
tests/specs/npm/npmrc_no_package_json/direct.out
Normal file
3
tests/specs/npm/npmrc_no_package_json/direct.out
Normal file
|
@ -0,0 +1,3 @@
|
|||
Download http://localhost:4261/@denotest%2fbin
|
||||
Download http://localhost:4261/@denotest/bin/1.0.0.tgz
|
||||
deno
|
8
tests/specs/npm/npmrc_no_package_json/main.js
Normal file
8
tests/specs/npm/npmrc_no_package_json/main.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
import { getValue, setValue } from "npm:@denotest/basic";
|
||||
import * as test from "npm:@denotest2/basic";
|
||||
|
||||
console.log(getValue());
|
||||
setValue(42);
|
||||
console.log(getValue());
|
||||
|
||||
console.log(test.getValue());
|
7
tests/specs/npm/npmrc_no_package_json/main.out
Normal file
7
tests/specs/npm/npmrc_no_package_json/main.out
Normal file
|
@ -0,0 +1,7 @@
|
|||
Download http://localhost:4261/@denotest%2fbasic
|
||||
Download http://localhost:4262/@denotest2%2fbasic
|
||||
Download http://localhost:4261/@denotest/basic/1.0.0.tgz
|
||||
Download http://localhost:4262/@denotest2/basic/1.0.0.tgz
|
||||
0
|
||||
42
|
||||
0
|
Loading…
Reference in a new issue