summaryrefslogtreecommitdiff
path: root/cli/graph_util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/graph_util.rs')
-rw-r--r--cli/graph_util.rs28
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