1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-24 15:19:26 -05:00

fix(cli): support --watch when running cjs npm packages (#25038)

This commit is contained in:
Luca Casonato 2024-08-14 15:21:11 +02:00 committed by GitHub
parent 533d31bc4e
commit 130a2592f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 53 additions and 3 deletions

View file

@ -1151,8 +1151,6 @@ impl CliOptions {
resolve_url_or_path("./$deno$stdin.ts", &cwd) resolve_url_or_path("./$deno$stdin.ts", &cwd)
.map_err(AnyError::from) .map_err(AnyError::from)
})? })?
} else if run_flags.watch.is_some() {
resolve_url_or_path(&run_flags.script, self.initial_cwd())?
} else if NpmPackageReqReference::from_str(&run_flags.script).is_ok() { } else if NpmPackageReqReference::from_str(&run_flags.script).is_ok() {
ModuleSpecifier::parse(&run_flags.script)? ModuleSpecifier::parse(&run_flags.script)?
} else { } else {

View file

@ -280,7 +280,22 @@ impl CliMainWorker {
/// Execute the given main module emitting load and unload events before and after execution /// Execute the given main module emitting load and unload events before and after execution
/// respectively. /// respectively.
pub async fn execute(&mut self) -> Result<(), AnyError> { pub async fn execute(&mut self) -> Result<(), AnyError> {
self.inner.execute_main_module_possibly_with_npm().await?; if self.inner.is_main_cjs {
deno_node::load_cjs_module(
&mut self.inner.worker.js_runtime,
&self
.inner
.main_module
.to_file_path()
.unwrap()
.to_string_lossy(),
true,
self.inner.shared.options.inspect_brk,
)?;
} else {
self.inner.execute_main_module_possibly_with_npm().await?;
}
self.inner.worker.dispatch_load_event()?; self.inner.worker.dispatch_load_event()?;
self.pending_unload = true; self.pending_unload = true;

View file

@ -3,6 +3,7 @@
use flaky_test::flaky_test; use flaky_test::flaky_test;
use test_util as util; use test_util as util;
use test_util::assert_contains; use test_util::assert_contains;
use test_util::env_vars_for_npm_tests;
use test_util::TempDir; use test_util::TempDir;
use tokio::io::AsyncBufReadExt; use tokio::io::AsyncBufReadExt;
use util::DenoChild; use util::DenoChild;
@ -707,6 +708,42 @@ async fn run_watch_no_dynamic() {
check_alive_then_kill(child); check_alive_then_kill(child);
} }
#[flaky_test(tokio)]
async fn run_watch_npm_specifier() {
let _g = util::http_server();
let t = TempDir::new();
let file_to_watch = t.path().join("file_to_watch.txt");
file_to_watch.write("Hello world");
let mut child = util::deno_cmd()
.current_dir(t.path())
.envs(env_vars_for_npm_tests())
.arg("run")
.arg("--watch=file_to_watch.txt")
.arg("-L")
.arg("debug")
.arg("npm:@denotest/bin/cli-cjs")
.arg("Hello world")
.env("NO_COLOR", "1")
.piped_output()
.spawn()
.unwrap();
let (mut stdout_lines, mut stderr_lines) = child_lines(&mut child);
wait_contains("Hello world", &mut stdout_lines).await;
wait_for_watcher("file_to_watch.txt", &mut stderr_lines).await;
// Change content of the file
file_to_watch.write("Hello world2");
wait_contains("Restarting", &mut stderr_lines).await;
wait_contains("Hello world", &mut stdout_lines).await;
wait_for_watcher("file_to_watch.txt", &mut stderr_lines).await;
check_alive_then_kill(child);
}
// TODO(bartlomieju): this test became flaky on macOS runner; it is unclear // TODO(bartlomieju): this test became flaky on macOS runner; it is unclear
// if that's because of a bug in code or the runner itself. We should reenable // if that's because of a bug in code or the runner itself. We should reenable
// it once we upgrade to XL runners for macOS. // it once we upgrade to XL runners for macOS.