mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(task): regression where npx <command>
sometimes couldn't find command (#23730)
Closes https://github.com/denoland/deno/issues/23724
This commit is contained in:
parent
47f7bed677
commit
263b6b971d
8 changed files with 59 additions and 9 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -1876,9 +1876,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "deno_task_shell"
|
||||
version = "0.16.0"
|
||||
version = "0.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b44af10161906e1bccc1fc966f074bec0148997bb7e2221ecd29416dcad90b3"
|
||||
checksum = "97e5ff66a1e89edb7ca0c36b73a8fcdc008ba426c4ad7a36e1dfb3f4a166179e"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures",
|
||||
|
|
|
@ -75,7 +75,7 @@ deno_lockfile.workspace = true
|
|||
deno_npm = "=0.18.0"
|
||||
deno_runtime = { workspace = true, features = ["include_js_files_for_snapshotting"] }
|
||||
deno_semver = "=0.5.4"
|
||||
deno_task_shell = "=0.16.0"
|
||||
deno_task_shell = "=0.16.1"
|
||||
deno_terminal.workspace = true
|
||||
eszip = "=0.68.2"
|
||||
napi_sym.workspace = true
|
||||
|
|
|
@ -16,6 +16,7 @@ use deno_core::futures;
|
|||
use deno_core::futures::future::LocalBoxFuture;
|
||||
use deno_runtime::deno_node::NodeResolver;
|
||||
use deno_semver::package::PackageNv;
|
||||
use deno_task_shell::ExecutableCommand;
|
||||
use deno_task_shell::ExecuteResult;
|
||||
use deno_task_shell::ShellCommand;
|
||||
use deno_task_shell::ShellCommandContext;
|
||||
|
@ -236,7 +237,15 @@ fn prepend_to_path(env_vars: &mut HashMap<String, String>, value: String) {
|
|||
|
||||
fn collect_env_vars() -> HashMap<String, String> {
|
||||
// get the starting env vars (the PWD env var will be set by deno_task_shell)
|
||||
let mut env_vars = std::env::vars().collect::<HashMap<String, String>>();
|
||||
let mut env_vars = std::env::vars()
|
||||
.map(|(k, v)| {
|
||||
if cfg!(windows) {
|
||||
(k.to_uppercase(), v)
|
||||
} else {
|
||||
(k, v)
|
||||
}
|
||||
})
|
||||
.collect::<HashMap<String, String>>();
|
||||
const INIT_CWD_NAME: &str = "INIT_CWD";
|
||||
if !env_vars.contains_key(INIT_CWD_NAME) {
|
||||
if let Ok(cwd) = std::env::current_dir() {
|
||||
|
@ -318,10 +327,17 @@ impl ShellCommand for NpxCommand {
|
|||
};
|
||||
command.execute(context)
|
||||
} else {
|
||||
let _ = context
|
||||
.stderr
|
||||
.write_line(&format!("npx: could not resolve command '{first_arg}'"));
|
||||
Box::pin(futures::future::ready(ExecuteResult::from_exit_code(1)))
|
||||
// can't find the command, so fallback to running the real npx command
|
||||
let npx_path = match context.resolve_command_path("npx") {
|
||||
Ok(npx) => npx,
|
||||
Err(err) => {
|
||||
let _ = context.stderr.write_line(&format!("{}", err));
|
||||
return Box::pin(futures::future::ready(
|
||||
ExecuteResult::from_exit_code(err.exit_code()),
|
||||
));
|
||||
}
|
||||
};
|
||||
ExecutableCommand::new("npx".to_string(), npx_path).execute(context)
|
||||
}
|
||||
} else {
|
||||
let _ = context.stderr.write_line("npx: missing command");
|
||||
|
|
11
tests/specs/task/npx_installed_pkg_non_byonm/__test__.jsonc
Normal file
11
tests/specs/task/npx_installed_pkg_non_byonm/__test__.jsonc
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"tempDir": true,
|
||||
"steps": [{
|
||||
"commandName": "npm",
|
||||
"args": "install",
|
||||
"output": "[WILDCARD]"
|
||||
}, {
|
||||
"args": "task say",
|
||||
"output": "main.out"
|
||||
}]
|
||||
}
|
7
tests/specs/task/npx_installed_pkg_non_byonm/deno.jsonc
Normal file
7
tests/specs/task/npx_installed_pkg_non_byonm/deno.jsonc
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
// not byonm
|
||||
"nodeModulesDir": true,
|
||||
"tasks": {
|
||||
"say": "npx cowsay moo"
|
||||
}
|
||||
}
|
9
tests/specs/task/npx_installed_pkg_non_byonm/main.out
Normal file
9
tests/specs/task/npx_installed_pkg_non_byonm/main.out
Normal file
|
@ -0,0 +1,9 @@
|
|||
Task say npx cowsay moo
|
||||
_____
|
||||
< moo >
|
||||
-----
|
||||
\ ^__^
|
||||
\ (oo)\_______
|
||||
(__)\ )\/\
|
||||
||----w |
|
||||
|| ||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"cowsay": "*"
|
||||
}
|
||||
}
|
4
tests/testdata/task/npx/non_existent.out
vendored
4
tests/testdata/task/npx/non_existent.out
vendored
|
@ -1,2 +1,4 @@
|
|||
Task non-existent npx this-command-should-not-exist-for-you
|
||||
npx: could not resolve command 'this-command-should-not-exist-for-you'
|
||||
npm ERR! code E404
|
||||
npm ERR! 404 Not Found - GET http://localhost:4260/this-command-should-not-exist-for-you
|
||||
[WILDCARD]
|
||||
|
|
Loading…
Reference in a new issue