mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 07:14:47 -05:00
fix: ensure no node_modules directory is created when a package.json exists and no npm dependencies are used (#18134)
Closes #18133 Closes #18038
This commit is contained in:
parent
983447e860
commit
11f225ef7d
3 changed files with 47 additions and 0 deletions
|
@ -127,6 +127,11 @@ mod map_to_vec {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NpmResolutionSnapshot {
|
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.
|
/// Resolve a package from a package requirement.
|
||||||
pub fn resolve_pkg_from_pkg_req(
|
pub fn resolve_pkg_from_pkg_req(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
@ -236,6 +236,10 @@ async fn sync_resolution_with_fs(
|
||||||
registry_url: &Url,
|
registry_url: &Url,
|
||||||
root_node_modules_dir_path: &Path,
|
root_node_modules_dir_path: &Path,
|
||||||
) -> Result<(), AnyError> {
|
) -> 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");
|
let deno_local_registry_dir = root_node_modules_dir_path.join(".deno");
|
||||||
fs::create_dir_all(&deno_local_registry_dir).with_context(|| {
|
fs::create_dir_all(&deno_local_registry_dir).with_context(|| {
|
||||||
format!("Creating '{}'", deno_local_registry_dir.display())
|
format!("Creating '{}'", deno_local_registry_dir.display())
|
||||||
|
|
|
@ -2867,6 +2867,44 @@ fn package_json_error_dep_value_test() {
|
||||||
.assert_matches_file("package_json/invalid_value/task.out");
|
.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 {
|
itest!(wasm_streaming_panic_test {
|
||||||
args: "run run/wasm_streaming_panic_test.js",
|
args: "run run/wasm_streaming_panic_test.js",
|
||||||
output: "run/wasm_streaming_panic_test.js.out",
|
output: "run/wasm_streaming_panic_test.js.out",
|
||||||
|
|
Loading…
Reference in a new issue