From 69da5d8290fda4797af5e3b3e5e7bf3c0141f203 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 28 May 2024 16:24:07 -0400 Subject: perf: skip npm install if graph has no new packages (#24017) --- cli/graph_util.rs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'cli/graph_util.rs') diff --git a/cli/graph_util.rs b/cli/graph_util.rs index 017d6b35d..b7e3240b5 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -566,16 +566,24 @@ impl ModuleGraphBuilder { graph.build(roots, loader, options).await; - if let Some(npm_resolver) = self.npm_resolver.as_managed() { - // ensure that the top level package.json is installed if a - // specifier was matched in the package.json - if self.resolver.found_package_json_dep() { - npm_resolver.ensure_top_level_package_json_install().await?; - } + let has_npm_packages_changed = + graph.npm_packages.len() != initial_npm_packages; + // skip installing npm packages if we don't have to + if is_first_execution + && self.npm_resolver.root_node_modules_path().is_some() + || has_npm_packages_changed + { + if let Some(npm_resolver) = self.npm_resolver.as_managed() { + // ensure that the top level package.json is installed if a + // specifier was matched in the package.json + if self.resolver.found_package_json_dep() { + npm_resolver.ensure_top_level_package_json_install().await?; + } - // resolve the dependencies of any pending dependencies - // that were inserted by building the graph - npm_resolver.resolve_pending().await?; + // resolve the dependencies of any pending dependencies + // that were inserted by building the graph + npm_resolver.resolve_pending().await?; + } } let has_redirects_changed = graph.redirects.len() != initial_redirects_len; @@ -583,8 +591,6 @@ impl ModuleGraphBuilder { graph.packages.package_deps_sum() != initial_package_deps_len; let has_jsr_package_mappings_changed = graph.packages.mappings().len() != initial_package_mappings_len; - let has_npm_packages_changed = - graph.npm_packages.len() != initial_npm_packages; if has_redirects_changed || has_jsr_package_deps_changed -- cgit v1.2.3