Skip to content

Commit

Permalink
production chunking for node.js
Browse files Browse the repository at this point in the history
  • Loading branch information
sokra authored and mischnic committed Jan 17, 2025
1 parent 0445406 commit 71a13ba
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 9 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion crates/next-core/src/next_server/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use turbopack::{
transition::Transition,
};
use turbopack_core::{
chunk::{module_id_strategies::ModuleIdStrategy, MinifyType},
chunk::{module_id_strategies::ModuleIdStrategy, ChunkingConfig, MinifyType},
compile_time_info::{
CompileTimeDefineValue, CompileTimeDefines, CompileTimeInfo, DefineableNameSegment,
FreeVarReferences,
Expand Down Expand Up @@ -1010,7 +1010,10 @@ pub async fn get_server_chunking_context_with_client_assets(

if next_mode.is_development() {
builder = builder.use_file_source_map_uris();
} else {
builder = builder.ecmascript_chunking_config(ChunkingConfig {})
}

Ok(builder.build())
}

Expand Down Expand Up @@ -1048,6 +1051,8 @@ pub async fn get_server_chunking_context(

if next_mode.is_development() {
builder = builder.use_file_source_map_uris()
} else {
builder = builder.ecmascript_chunking_config(ChunkingConfig {})
}

Ok(builder.build())
Expand Down
18 changes: 13 additions & 5 deletions turbopack/crates/turbopack-cli/src/build/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,8 @@ async fn build_internal(

Vc::upcast(builder.build())
}
Target::Node => Vc::upcast(
NodeJsChunkingContext::builder(
Target::Node => {
let mut builder = NodeJsChunkingContext::builder(
project_path,
build_output_root,
ResolvedVc::cell(build_output_root_to_root_path),
Expand All @@ -255,9 +255,17 @@ async fn build_internal(
.await?,
runtime_type,
)
.minify_type(minify_type)
.build(),
),
.minify_type(minify_type);

match *node_env.await? {
NodeEnv::Development => {}
NodeEnv::Production => {
builder = builder.ecmascript_chunking_config(ChunkingConfig {})
}
}

Vc::upcast(builder.build())
}
};

let compile_time_info = get_client_compile_time_info(browserslist_query, node_env);
Expand Down
1 change: 1 addition & 0 deletions turbopack/crates/turbopack-nodejs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ workspace = true
anyhow = { workspace = true }
indexmap = { workspace = true }
indoc = { workspace = true }
rustc-hash = { workspace = true }
serde = { workspace = true }
tracing = { workspace = true }
urlencoding = { workspace = true }
Expand Down
31 changes: 28 additions & 3 deletions turbopack/crates/turbopack-nodejs/src/chunking_context.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use std::iter::once;

use anyhow::{bail, Context, Result};
use rustc_hash::FxHashMap;
use tracing::Instrument;
use turbo_rcstr::RcStr;
use turbo_tasks::{ResolvedVc, TryJoinIterExt, Value, ValueToString, Vc};
Expand All @@ -10,8 +11,9 @@ use turbopack_core::{
availability_info::AvailabilityInfo,
chunk_group::{make_chunk_group, MakeChunkGroupResult},
module_id_strategies::{DevModuleIdStrategy, ModuleIdStrategy},
Chunk, ChunkGroupResult, ChunkItem, ChunkableModule, ChunkableModules, ChunkingContext,
EntryChunkGroupResult, EvaluatableAssets, MinifyType, ModuleId,
Chunk, ChunkGroupResult, ChunkItem, ChunkableModule, ChunkableModules, ChunkingConfig,
ChunkingConfigs, ChunkingContext, EntryChunkGroupResult, EvaluatableAssets, MinifyType,
ModuleId,
},
environment::Environment,
ident::AssetIdent,
Expand All @@ -21,7 +23,7 @@ use turbopack_core::{
};
use turbopack_ecmascript::{
async_chunk::module::AsyncLoaderModule,
chunk::EcmascriptChunk,
chunk::{EcmascriptChunk, EcmascriptChunkType},
manifest::{chunk_asset::ManifestAsyncModule, loader_item::ManifestLoaderChunkItem},
};
use turbopack_ecmascript_runtime::RuntimeType;
Expand Down Expand Up @@ -74,6 +76,14 @@ impl NodeJsChunkingContextBuilder {
self
}

pub fn ecmascript_chunking_config(
mut self,
ecmascript_chunking_config: ChunkingConfig,
) -> Self {
self.chunking_context.ecmascript_chunking_config = Some(ecmascript_chunking_config);
self
}

/// Builds the chunking context.
pub fn build(self) -> Vc<NodeJsChunkingContext> {
NodeJsChunkingContext::new(Value::new(self.chunking_context))
Expand Down Expand Up @@ -112,6 +122,8 @@ pub struct NodeJsChunkingContext {
module_id_strategy: ResolvedVc<Box<dyn ModuleIdStrategy>>,
/// Whether to use file:// uris for source map sources
should_use_file_source_map_uris: bool,
/// The chunking config for ecmascript
ecmascript_chunking_config: Option<ChunkingConfig>,
}

impl NodeJsChunkingContext {
Expand Down Expand Up @@ -142,6 +154,7 @@ impl NodeJsChunkingContext {
manifest_chunks: false,
should_use_file_source_map_uris: false,
module_id_strategy: ResolvedVc::upcast(DevModuleIdStrategy::new_resolved()),
ecmascript_chunking_config: None,
},
}
}
Expand Down Expand Up @@ -270,6 +283,18 @@ impl ChunkingContext for NodeJsChunkingContext {
Vc::cell(self.should_use_file_source_map_uris)
}

#[turbo_tasks::function]
async fn chunking_configs(&self) -> Result<Vc<ChunkingConfigs>> {
let mut map = FxHashMap::default();
if let Some(ecmascript) = &self.ecmascript_chunking_config {
map.insert(
ResolvedVc::upcast(Vc::<EcmascriptChunkType>::default().to_resolved().await?),
ecmascript.clone(),
);
}
Ok(Vc::cell(map))
}

#[turbo_tasks::function]
async fn asset_path(
&self,
Expand Down

0 comments on commit 71a13ba

Please sign in to comment.