From 337bebbf65038907c3bf9e3acdb3d68bc79b9453 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 27 Jan 2025 11:12:37 +0100 Subject: [PATCH] global module ids in cli --- .../crates/turbopack-cli/src/build/mod.rs | 143 +++++++++++------- 1 file changed, 85 insertions(+), 58 deletions(-) diff --git a/turbopack/crates/turbopack-cli/src/build/mod.rs b/turbopack/crates/turbopack-cli/src/build/mod.rs index 59306f48e6e8d..49c005b7e90d6 100644 --- a/turbopack/crates/turbopack-cli/src/build/mod.rs +++ b/turbopack/crates/turbopack-cli/src/build/mod.rs @@ -16,6 +16,7 @@ use turbo_tasks_backend::{ noop_backing_storage, BackendOptions, NoopBackingStorage, TurboTasksBackend, }; use turbo_tasks_fs::FileSystem; +use turbopack::global_module_ids::get_global_module_id_strategy; use turbopack_browser::BrowserChunkingContext; use turbopack_cli_utils::issue::{ConsoleUi, LogOptions}; use turbopack_core::{ @@ -210,6 +211,88 @@ async fn build_internal( NodeEnv::Development => RuntimeType::Development, NodeEnv::Production => RuntimeType::Production, }; + let compile_time_info = get_client_compile_time_info(browserslist_query.clone(), node_env); + let execution_context = ExecutionContext::new( + *root_path, + Vc::upcast( + NodeJsChunkingContext::builder( + project_path, + build_output_root, + ResolvedVc::cell(build_output_root_to_root_path.clone()), + build_output_root, + build_output_root, + build_output_root, + Environment::new(Value::new(ExecutionEnvironment::NodeJsLambda( + NodeJsEnvironment::default().resolved_cell(), + ))) + .to_resolved() + .await?, + runtime_type, + ) + .build(), + ), + load_env(*root_path), + ); + + let asset_context = get_client_asset_context( + *project_path, + execution_context, + compile_time_info, + node_env, + source_maps_type, + ); + + let entry_requests = (*entry_requests + .into_iter() + .map(|r| async move { + Ok(match r { + EntryRequest::Relative(p) => Request::relative( + Value::new(p.clone().into()), + Default::default(), + Default::default(), + false, + ), + EntryRequest::Module(m, p) => Request::module( + m.clone(), + Value::new(p.clone().into()), + Default::default(), + Default::default(), + ), + }) + }) + .try_join() + .await?) + .to_vec(); + + let origin = PlainResolveOrigin::new(asset_context, project_fs.root().join("_".into())); + let project_dir = &project_dir; + let entries = entry_requests + .into_iter() + .map(|request_vc| async move { + let ty = Value::new(ReferenceType::Entry(EntryReferenceSubType::Undefined)); + let request = request_vc.await?; + origin + .resolve_asset(request_vc, origin.resolve_options(ty.clone()), ty) + .await? + .first_module() + .await? + .with_context(|| { + format!( + "Unable to resolve entry {} from directory {}.", + request.request().unwrap(), + project_dir + ) + }) + }) + .try_join() + .await?; + + let module_graph = ModuleGraph::from_modules(Vc::cell(entries.clone())); + let module_id_strategy = ResolvedVc::upcast( + get_global_module_id_strategy(module_graph) + .to_resolved() + .await?, + ); let chunking_context: Vc> = match target { Target::Browser => { @@ -234,6 +317,7 @@ async fn build_internal( runtime_type, ) .source_maps(source_maps_type) + .module_id_strategy(module_id_strategy) .minify_type(minify_type); match *node_env.await? { @@ -264,6 +348,7 @@ async fn build_internal( runtime_type, ) .source_maps(source_maps_type) + .module_id_strategy(module_id_strategy) .minify_type(minify_type); match *node_env.await? { @@ -280,64 +365,6 @@ async fn build_internal( } }; - let compile_time_info = get_client_compile_time_info(browserslist_query, node_env); - let execution_context = - ExecutionContext::new(*root_path, chunking_context, load_env(*root_path)); - let asset_context = get_client_asset_context( - *project_path, - execution_context, - compile_time_info, - node_env, - source_maps_type, - ); - - let entry_requests = (*entry_requests - .into_iter() - .map(|r| async move { - Ok(match r { - EntryRequest::Relative(p) => Request::relative( - Value::new(p.clone().into()), - Default::default(), - Default::default(), - false, - ), - EntryRequest::Module(m, p) => Request::module( - m.clone(), - Value::new(p.clone().into()), - Default::default(), - Default::default(), - ), - }) - }) - .try_join() - .await?) - .to_vec(); - - let origin = PlainResolveOrigin::new(asset_context, project_fs.root().join("_".into())); - let project_dir = &project_dir; - let entries = entry_requests - .into_iter() - .map(|request_vc| async move { - let ty = Value::new(ReferenceType::Entry(EntryReferenceSubType::Undefined)); - let request = request_vc.await?; - origin - .resolve_asset(request_vc, origin.resolve_options(ty.clone()), ty) - .await? - .first_module() - .await? - .with_context(|| { - format!( - "Unable to resolve entry {} from directory {}.", - request.request().unwrap(), - project_dir - ) - }) - }) - .try_join() - .await?; - - let module_graph = ModuleGraph::from_modules(Vc::cell(entries.clone())); - let entry_chunk_groups = entries .into_iter() .map(|entry_module| async move {