summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-03-13 10:03:19 -0400
committerGitHub <noreply@github.com>2023-03-13 14:03:19 +0000
commit11f225ef7d8d51a048c11c57f47674e1c5bb6f3e (patch)
treee6f4e823a8f91d29fa871f33bd9bb82c750fb9a8 /cli
parent983447e860529d1b95ed68eee5aae1696c11d2bd (diff)
fix: ensure no node_modules directory is created when a package.json exists and no npm dependencies are used (#18134)
Closes #18133 Closes #18038
Diffstat (limited to 'cli')
-rw-r--r--cli/npm/resolution/snapshot.rs5
-rw-r--r--cli/npm/resolvers/local.rs4
-rw-r--r--cli/tests/integration/run_tests.rs38
3 files changed, 47 insertions, 0 deletions
diff --git a/cli/npm/resolution/snapshot.rs b/cli/npm/resolution/snapshot.rs
index e986294ec..e8df8286e 100644
--- a/cli/npm/resolution/snapshot.rs
+++ b/cli/npm/resolution/snapshot.rs
@@ -127,6 +127,11 @@ mod map_to_vec {
}
impl NpmResolutionSnapshot {
+ /// Gets if this snapshot is empty.
+ pub fn is_empty(&self) -> bool {
+ self.packages.is_empty() && self.pending_unresolved_packages.is_empty()
+ }
+
/// Resolve a package from a package requirement.
pub fn resolve_pkg_from_pkg_req(
&self,
diff --git a/cli/npm/resolvers/local.rs b/cli/npm/resolvers/local.rs
index 89f5decd8..3e2710165 100644
--- a/cli/npm/resolvers/local.rs
+++ b/cli/npm/resolvers/local.rs
@@ -236,6 +236,10 @@ async fn sync_resolution_with_fs(
registry_url: &Url,
root_node_modules_dir_path: &Path,
) -> Result<(), AnyError> {
+ if snapshot.is_empty() {
+ return Ok(()); // don't create the directory
+ }
+
let deno_local_registry_dir = root_node_modules_dir_path.join(".deno");
fs::create_dir_all(&deno_local_registry_dir).with_context(|| {
format!("Creating '{}'", deno_local_registry_dir.display())
diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs
index 0e1516cc3..3a19564a3 100644
--- a/cli/tests/integration/run_tests.rs
+++ b/cli/tests/integration/run_tests.rs
@@ -2867,6 +2867,44 @@ fn package_json_error_dep_value_test() {
.assert_matches_file("package_json/invalid_value/task.out");
}
+#[test]
+fn package_json_no_node_modules_dir_created() {
+ // it should not create a node_modules directory
+ let context = TestContextBuilder::new()
+ .add_npm_env_vars()
+ .use_temp_cwd()
+ .build();
+ let temp_dir = context.deno_dir();
+
+ temp_dir.write("deno.json", "{}");
+ temp_dir.write("package.json", "{}");
+ temp_dir.write("main.ts", "");
+
+ context.new_command().args("run main.ts").run();
+
+ assert!(!temp_dir.path().join("node_modules").exists());
+}
+
+#[test]
+fn node_modules_dir_no_npm_specifiers_no_dir_created() {
+ // it should not create a node_modules directory
+ let context = TestContextBuilder::new()
+ .add_npm_env_vars()
+ .use_temp_cwd()
+ .build();
+ let temp_dir = context.deno_dir();
+
+ temp_dir.write("deno.json", "{}");
+ temp_dir.write("main.ts", "");
+
+ context
+ .new_command()
+ .args("run --node-modules-dir main.ts")
+ .run();
+
+ assert!(!temp_dir.path().join("node_modules").exists());
+}
+
itest!(wasm_streaming_panic_test {
args: "run run/wasm_streaming_panic_test.js",
output: "run/wasm_streaming_panic_test.js.out",