diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-05-28 16:24:07 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-28 16:24:07 -0400 |
commit | 69da5d8290fda4797af5e3b3e5e7bf3c0141f203 (patch) | |
tree | bf68be51774983adcd1da41eac3aa5ce13dd867f /cli/graph_util.rs | |
parent | 57617af16a4280aa3bc54292f18763942d67d460 (diff) |
perf: skip npm install if graph has no new packages (#24017)
Diffstat (limited to 'cli/graph_util.rs')
-rw-r--r-- | cli/graph_util.rs | 28 |
1 files changed, 17 insertions, 11 deletions
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 |