summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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",