diff --git a/cli/tools/task.rs b/cli/tools/task.rs index 5cb6cc1127..2429e56004 100644 --- a/cli/tools/task.rs +++ b/cli/tools/task.rs @@ -344,24 +344,27 @@ impl ShellCommand for NpmCommand { mut context: ShellCommandContext, ) -> LocalBoxFuture<'static, ExecuteResult> { if context.args.first().map(|s| s.as_str()) == Some("run") - && !context.args.iter().any(|s| s == "--") + && context.args.len() > 2 + // for now, don't run any npm scripts that have a flag because + // we don't handle stuff like `--workspaces` properly + && !context.args.iter().any(|s| s.starts_with('-')) { - if let Some(task_name) = context.args.get(1) { - // run with deno task instead - let mut args = vec!["task".to_string(), task_name.to_string()]; - args.extend(context.args.iter().skip(2).cloned()); - let mut state = context.state; - state.apply_env_var(USE_PKG_JSON_HIDDEN_ENV_VAR_NAME, "1"); - return ExecutableCommand::new( - "deno".to_string(), - std::env::current_exe().unwrap(), - ) - .execute(ShellCommandContext { - args, - state, - ..context - }); - } + // run with deno task instead + let mut args = Vec::with_capacity(context.args.len()); + args.push("task".to_string()); + args.extend(context.args.iter().skip(1).cloned()); + + let mut state = context.state; + state.apply_env_var(USE_PKG_JSON_HIDDEN_ENV_VAR_NAME, "1"); + return ExecutableCommand::new( + "deno".to_string(), + std::env::current_exe().unwrap(), + ) + .execute(ShellCommandContext { + args, + state, + ..context + }); } // fallback to running the real npm command @@ -647,7 +650,7 @@ esac if [ -x "$basedir/node" ]; then exec "$basedir/node" "$basedir/../example/bin/example" "$@" -else +else exec node "$basedir/../example/bin/example" "$@" fi"#; assert_eq!( diff --git a/tests/specs/task/npm_run/__test__.jsonc b/tests/specs/task/npm_run/__test__.jsonc index b6cb249b8a..7f3ce2885a 100644 --- a/tests/specs/task/npm_run/__test__.jsonc +++ b/tests/specs/task/npm_run/__test__.jsonc @@ -12,6 +12,10 @@ "npm_run": { "args": "task npm_run", "output": "task_npm_run.out" + }, + "npm_run_args": { + "args": "task npm_run_args", + "output": "task_npm_run_args.out" } } } diff --git a/tests/specs/task/npm_run/deno.jsonc b/tests/specs/task/npm_run/deno.jsonc index bd6dde8739..e923b063c2 100644 --- a/tests/specs/task/npm_run/deno.jsonc +++ b/tests/specs/task/npm_run/deno.jsonc @@ -6,6 +6,7 @@ // currently this will execute using the actual `npm run` because we // haven't implemented the flags for `npm run` yet "test_using_npm": "npm run non_existent -- --ignore-scripts", - "npm_run": "npm run" + "npm_run": "npm run", + "npm_run_args": "npm run -d echo" } } diff --git a/tests/specs/task/npm_run/task_npm_run_args.out b/tests/specs/task/npm_run/task_npm_run_args.out new file mode 100644 index 0000000000..8040ba4f6a --- /dev/null +++ b/tests/specs/task/npm_run/task_npm_run_args.out @@ -0,0 +1,5 @@ +Task npm_run_args npm run -d echo +npm info using[WILDCARD] + +> echo +[WILDCARD]