Skip to content

Commit a55f482

Browse files
committed
feat: treeshake share
1 parent aa49744 commit a55f482

File tree

71 files changed

+3868
-491
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+3868
-491
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/node_binding/napi-binding.d.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,10 +540,13 @@ export declare enum BuiltinPluginName {
540540
SplitChunksPlugin = 'SplitChunksPlugin',
541541
RemoveDuplicateModulesPlugin = 'RemoveDuplicateModulesPlugin',
542542
ShareRuntimePlugin = 'ShareRuntimePlugin',
543+
OptimizeDependencyReferencedExportsPlugin = 'OptimizeDependencyReferencedExportsPlugin',
543544
ContainerPlugin = 'ContainerPlugin',
544545
ContainerReferencePlugin = 'ContainerReferencePlugin',
545546
ProvideSharedPlugin = 'ProvideSharedPlugin',
546547
ConsumeSharedPlugin = 'ConsumeSharedPlugin',
548+
CollectShareEntryPlugin = 'CollectShareEntryPlugin',
549+
ShareContainerPlugin = 'ShareContainerPlugin',
547550
ModuleFederationRuntimePlugin = 'ModuleFederationRuntimePlugin',
548551
ModuleFederationManifestPlugin = 'ModuleFederationManifestPlugin',
549552
NamedModuleIdsPlugin = 'NamedModuleIdsPlugin',
@@ -1835,6 +1838,11 @@ export interface RawCircularDependencyRspackPluginOptions {
18351838
onEnd?: () => void
18361839
}
18371840

1841+
export interface RawCollectShareEntryPluginOptions {
1842+
consumes: Array<RawConsumeOptions>
1843+
filename?: string
1844+
}
1845+
18381846
export interface RawConsumeOptions {
18391847
key: string
18401848
import?: string
@@ -2582,6 +2590,19 @@ export interface RawOptimizationOptions {
25822590
avoidEntryIife: boolean
25832591
}
25842592

2593+
export interface RawOptimizeDependencyReferencedExportsPluginOptions {
2594+
shared: Array<RawOptimizeSharedConfig>
2595+
injectUsedExports?: boolean
2596+
manifestFileName?: string
2597+
statsFileName?: string
2598+
}
2599+
2600+
export interface RawOptimizeSharedConfig {
2601+
shareKey: string
2602+
treeshake: boolean
2603+
usedExports?: Array<string>
2604+
}
2605+
25852606
export interface RawOptions {
25862607
name?: string
25872608
mode?: undefined | 'production' | 'development' | 'none'
@@ -2818,6 +2839,14 @@ export interface RawRuntimeChunkOptions {
28182839
name: string | ((entrypoint: { name: string }) => string)
28192840
}
28202841

2842+
export interface RawShareContainerPluginOptions {
2843+
name: string
2844+
request: string
2845+
version: string
2846+
fileName?: string
2847+
library: JsLibraryOptions
2848+
}
2849+
28212850
export interface RawSizeLimitsPluginOptions {
28222851
assetFilter?: (assetFilename: string) => boolean
28232852
hints?: "error" | "warning"

crates/node_binding/rspack.wasi-browser.js

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -63,63 +63,4 @@ const {
6363
},
6464
})
6565
export default __napiModule.exports
66-
export const Assets = __napiModule.exports.Assets
67-
export const AsyncDependenciesBlock = __napiModule.exports.AsyncDependenciesBlock
68-
export const Chunk = __napiModule.exports.Chunk
69-
export const ChunkGraph = __napiModule.exports.ChunkGraph
70-
export const ChunkGroup = __napiModule.exports.ChunkGroup
71-
export const Chunks = __napiModule.exports.Chunks
72-
export const CodeGenerationResult = __napiModule.exports.CodeGenerationResult
73-
export const CodeGenerationResults = __napiModule.exports.CodeGenerationResults
74-
export const ConcatenatedModule = __napiModule.exports.ConcatenatedModule
75-
export const ContextModule = __napiModule.exports.ContextModule
76-
export const Dependency = __napiModule.exports.Dependency
77-
export const Diagnostics = __napiModule.exports.Diagnostics
78-
export const EntryDataDto = __napiModule.exports.EntryDataDto
79-
export const EntryDataDTO = __napiModule.exports.EntryDataDTO
80-
export const EntryDependency = __napiModule.exports.EntryDependency
81-
export const EntryOptionsDto = __napiModule.exports.EntryOptionsDto
82-
export const EntryOptionsDTO = __napiModule.exports.EntryOptionsDTO
83-
export const ExternalModule = __napiModule.exports.ExternalModule
84-
export const JsCompilation = __napiModule.exports.JsCompilation
85-
export const JsCompiler = __napiModule.exports.JsCompiler
86-
export const JsContextModuleFactoryAfterResolveData = __napiModule.exports.JsContextModuleFactoryAfterResolveData
87-
export const JsContextModuleFactoryBeforeResolveData = __napiModule.exports.JsContextModuleFactoryBeforeResolveData
88-
export const JsDependencies = __napiModule.exports.JsDependencies
89-
export const JsEntries = __napiModule.exports.JsEntries
90-
export const JsExportsInfo = __napiModule.exports.JsExportsInfo
91-
export const JsModuleGraph = __napiModule.exports.JsModuleGraph
92-
export const JsResolver = __napiModule.exports.JsResolver
93-
export const JsResolverFactory = __napiModule.exports.JsResolverFactory
94-
export const JsStats = __napiModule.exports.JsStats
95-
export const KnownBuildInfo = __napiModule.exports.KnownBuildInfo
96-
export const Module = __napiModule.exports.Module
97-
export const ModuleGraphConnection = __napiModule.exports.ModuleGraphConnection
98-
export const NativeWatcher = __napiModule.exports.NativeWatcher
99-
export const NativeWatchResult = __napiModule.exports.NativeWatchResult
100-
export const NormalModule = __napiModule.exports.NormalModule
101-
export const RawExternalItemFnCtx = __napiModule.exports.RawExternalItemFnCtx
102-
export const ReadonlyResourceData = __napiModule.exports.ReadonlyResourceData
103-
export const ResolverFactory = __napiModule.exports.ResolverFactory
104-
export const Sources = __napiModule.exports.Sources
105-
export const VirtualFileStore = __napiModule.exports.VirtualFileStore
106-
export const JsVirtualFileStore = __napiModule.exports.JsVirtualFileStore
107-
export const async = __napiModule.exports.async
108-
export const BuiltinPluginName = __napiModule.exports.BuiltinPluginName
109-
export const cleanupGlobalTrace = __napiModule.exports.cleanupGlobalTrace
110-
export const EnforceExtension = __napiModule.exports.EnforceExtension
111-
export const EXPECTED_RSPACK_CORE_VERSION = __napiModule.exports.EXPECTED_RSPACK_CORE_VERSION
112-
export const formatDiagnostic = __napiModule.exports.formatDiagnostic
113-
export const JsLoaderState = __napiModule.exports.JsLoaderState
114-
export const JsRspackSeverity = __napiModule.exports.JsRspackSeverity
115-
export const loadBrowserslist = __napiModule.exports.loadBrowserslist
116-
export const minify = __napiModule.exports.minify
117-
export const minifySync = __napiModule.exports.minifySync
118-
export const RawJavascriptParserCommonjsExports = __napiModule.exports.RawJavascriptParserCommonjsExports
119-
export const RawRuleSetConditionType = __napiModule.exports.RawRuleSetConditionType
120-
export const registerGlobalTrace = __napiModule.exports.registerGlobalTrace
121-
export const RegisterJsTapKind = __napiModule.exports.RegisterJsTapKind
122-
export const sync = __napiModule.exports.sync
123-
export const syncTraceEvent = __napiModule.exports.syncTraceEvent
124-
export const transform = __napiModule.exports.transform
125-
export const transformSync = __napiModule.exports.transformSync
66+

crates/node_binding/rspack.wasi.cjs

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -108,63 +108,4 @@ const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule
108108
},
109109
})
110110
module.exports = __napiModule.exports
111-
module.exports.Assets = __napiModule.exports.Assets
112-
module.exports.AsyncDependenciesBlock = __napiModule.exports.AsyncDependenciesBlock
113-
module.exports.Chunk = __napiModule.exports.Chunk
114-
module.exports.ChunkGraph = __napiModule.exports.ChunkGraph
115-
module.exports.ChunkGroup = __napiModule.exports.ChunkGroup
116-
module.exports.Chunks = __napiModule.exports.Chunks
117-
module.exports.CodeGenerationResult = __napiModule.exports.CodeGenerationResult
118-
module.exports.CodeGenerationResults = __napiModule.exports.CodeGenerationResults
119-
module.exports.ConcatenatedModule = __napiModule.exports.ConcatenatedModule
120-
module.exports.ContextModule = __napiModule.exports.ContextModule
121-
module.exports.Dependency = __napiModule.exports.Dependency
122-
module.exports.Diagnostics = __napiModule.exports.Diagnostics
123-
module.exports.EntryDataDto = __napiModule.exports.EntryDataDto
124-
module.exports.EntryDataDTO = __napiModule.exports.EntryDataDTO
125-
module.exports.EntryDependency = __napiModule.exports.EntryDependency
126-
module.exports.EntryOptionsDto = __napiModule.exports.EntryOptionsDto
127-
module.exports.EntryOptionsDTO = __napiModule.exports.EntryOptionsDTO
128-
module.exports.ExternalModule = __napiModule.exports.ExternalModule
129-
module.exports.JsCompilation = __napiModule.exports.JsCompilation
130-
module.exports.JsCompiler = __napiModule.exports.JsCompiler
131-
module.exports.JsContextModuleFactoryAfterResolveData = __napiModule.exports.JsContextModuleFactoryAfterResolveData
132-
module.exports.JsContextModuleFactoryBeforeResolveData = __napiModule.exports.JsContextModuleFactoryBeforeResolveData
133-
module.exports.JsDependencies = __napiModule.exports.JsDependencies
134-
module.exports.JsEntries = __napiModule.exports.JsEntries
135-
module.exports.JsExportsInfo = __napiModule.exports.JsExportsInfo
136-
module.exports.JsModuleGraph = __napiModule.exports.JsModuleGraph
137-
module.exports.JsResolver = __napiModule.exports.JsResolver
138-
module.exports.JsResolverFactory = __napiModule.exports.JsResolverFactory
139-
module.exports.JsStats = __napiModule.exports.JsStats
140-
module.exports.KnownBuildInfo = __napiModule.exports.KnownBuildInfo
141-
module.exports.Module = __napiModule.exports.Module
142-
module.exports.ModuleGraphConnection = __napiModule.exports.ModuleGraphConnection
143-
module.exports.NativeWatcher = __napiModule.exports.NativeWatcher
144-
module.exports.NativeWatchResult = __napiModule.exports.NativeWatchResult
145-
module.exports.NormalModule = __napiModule.exports.NormalModule
146-
module.exports.RawExternalItemFnCtx = __napiModule.exports.RawExternalItemFnCtx
147-
module.exports.ReadonlyResourceData = __napiModule.exports.ReadonlyResourceData
148-
module.exports.ResolverFactory = __napiModule.exports.ResolverFactory
149-
module.exports.Sources = __napiModule.exports.Sources
150-
module.exports.VirtualFileStore = __napiModule.exports.VirtualFileStore
151-
module.exports.JsVirtualFileStore = __napiModule.exports.JsVirtualFileStore
152-
module.exports.async = __napiModule.exports.async
153-
module.exports.BuiltinPluginName = __napiModule.exports.BuiltinPluginName
154-
module.exports.cleanupGlobalTrace = __napiModule.exports.cleanupGlobalTrace
155-
module.exports.EnforceExtension = __napiModule.exports.EnforceExtension
156-
module.exports.EXPECTED_RSPACK_CORE_VERSION = __napiModule.exports.EXPECTED_RSPACK_CORE_VERSION
157-
module.exports.formatDiagnostic = __napiModule.exports.formatDiagnostic
158-
module.exports.JsLoaderState = __napiModule.exports.JsLoaderState
159-
module.exports.JsRspackSeverity = __napiModule.exports.JsRspackSeverity
160-
module.exports.loadBrowserslist = __napiModule.exports.loadBrowserslist
161-
module.exports.minify = __napiModule.exports.minify
162-
module.exports.minifySync = __napiModule.exports.minifySync
163-
module.exports.RawJavascriptParserCommonjsExports = __napiModule.exports.RawJavascriptParserCommonjsExports
164-
module.exports.RawRuleSetConditionType = __napiModule.exports.RawRuleSetConditionType
165-
module.exports.registerGlobalTrace = __napiModule.exports.registerGlobalTrace
166-
module.exports.RegisterJsTapKind = __napiModule.exports.RegisterJsTapKind
167-
module.exports.sync = __napiModule.exports.sync
168-
module.exports.syncTraceEvent = __napiModule.exports.syncTraceEvent
169-
module.exports.transform = __napiModule.exports.transform
170-
module.exports.transformSync = __napiModule.exports.transformSync
111+

crates/rspack_binding_api/src/plugins/interceptor.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ use crate::{
7878
JsContextModuleFactoryAfterResolveDataWrapper, JsContextModuleFactoryAfterResolveResult,
7979
JsContextModuleFactoryBeforeResolveDataWrapper, JsContextModuleFactoryBeforeResolveResult,
8080
},
81+
dependency::DependencyWrapper,
8182
html::{
8283
JsAfterEmitData, JsAfterTemplateExecutionData, JsAlterAssetTagGroupsData, JsAlterAssetTagsData,
8384
JsBeforeAssetTagGenerationData, JsBeforeEmitData,
@@ -94,7 +95,7 @@ use crate::{
9495
runtime::{
9596
JsAdditionalTreeRuntimeRequirementsArg, JsAdditionalTreeRuntimeRequirementsResult,
9697
JsCreateLinkData, JsCreateScriptData, JsLinkPrefetchData, JsLinkPreloadData, JsRuntimeGlobals,
97-
JsRuntimeRequirementInTreeArg, JsRuntimeRequirementInTreeResult,
98+
JsRuntimeRequirementInTreeArg, JsRuntimeRequirementInTreeResult, JsRuntimeSpec,
9899
},
99100
source::JsSourceToJs,
100101
};

crates/rspack_binding_api/src/raw_options/raw_builtins/mod.rs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ use napi_derive::napi;
3232
use raw_dll::{RawDllReferenceAgencyPluginOptions, RawFlagAllModulesAsUsedPluginOptions};
3333
use raw_ids::RawOccurrenceChunkIdsPluginOptions;
3434
use raw_lightning_css_minimizer::RawLightningCssMinimizerRspackPluginOptions;
35-
use raw_mf::{RawModuleFederationManifestPluginOptions, RawModuleFederationRuntimePluginOptions};
35+
use raw_mf::{
36+
RawCollectShareEntryPluginOptions, RawModuleFederationManifestPluginOptions,
37+
RawModuleFederationRuntimePluginOptions, RawOptimizeDependencyReferencedExportsPluginOptions,
38+
RawProvideOptions,
39+
};
3640
use raw_sri::RawSubresourceIntegrityPluginOptions;
3741
use rspack_core::{BoxPlugin, Plugin, PluginExt};
3842
use rspack_error::{Result, ToStringResultToRspackResultExt};
@@ -75,8 +79,10 @@ use rspack_plugin_lightning_css_minimizer::LightningCssMinimizerRspackPlugin;
7579
use rspack_plugin_limit_chunk_count::LimitChunkCountPlugin;
7680
use rspack_plugin_merge_duplicate_chunks::MergeDuplicateChunksPlugin;
7781
use rspack_plugin_mf::{
78-
ConsumeSharedPlugin, ContainerPlugin, ContainerReferencePlugin, ModuleFederationManifestPlugin,
79-
ModuleFederationRuntimePlugin, ProvideSharedPlugin, ShareRuntimePlugin,
82+
CollectShareEntryPlugin, ConsumeSharedPlugin, ContainerPlugin, ContainerReferencePlugin,
83+
ModuleFederationManifestPlugin, ModuleFederationRuntimePlugin,
84+
OptimizeDependencyReferencedExportsPlugin, ProvideSharedPlugin, ShareContainerPlugin,
85+
ShareRuntimePlugin,
8086
};
8187
use rspack_plugin_module_info_header::ModuleInfoHeaderPlugin;
8288
use rspack_plugin_module_replacement::{ContextReplacementPlugin, NormalModuleReplacementPlugin};
@@ -117,7 +123,7 @@ use self::{
117123
raw_limit_chunk_count::RawLimitChunkCountPluginOptions,
118124
raw_mf::{
119125
RawConsumeSharedPluginOptions, RawContainerPluginOptions, RawContainerReferencePluginOptions,
120-
RawProvideOptions,
126+
RawShareContainerPluginOptions,
121127
},
122128
raw_normal_replacement::RawNormalModuleReplacementPluginOptions,
123129
raw_runtime_chunk::RawRuntimeChunkOptions,
@@ -167,10 +173,13 @@ pub enum BuiltinPluginName {
167173
SplitChunksPlugin,
168174
RemoveDuplicateModulesPlugin,
169175
ShareRuntimePlugin,
176+
OptimizeDependencyReferencedExportsPlugin,
170177
ContainerPlugin,
171178
ContainerReferencePlugin,
172179
ProvideSharedPlugin,
173180
ConsumeSharedPlugin,
181+
CollectShareEntryPlugin,
182+
ShareContainerPlugin,
174183
ModuleFederationRuntimePlugin,
175184
ModuleFederationManifestPlugin,
176185
NamedModuleIdsPlugin,
@@ -463,6 +472,13 @@ impl<'a> BuiltinPlugin<'a> {
463472
)
464473
.boxed(),
465474
),
475+
BuiltinPluginName::OptimizeDependencyReferencedExportsPlugin => {
476+
let options =
477+
downcast_into::<RawOptimizeDependencyReferencedExportsPluginOptions>(self.options)
478+
.map_err(|report| napi::Error::from_reason(report.to_string()))?
479+
.into();
480+
plugins.push(OptimizeDependencyReferencedExportsPlugin::new(options).boxed());
481+
}
466482
BuiltinPluginName::ContainerPlugin => {
467483
plugins.push(
468484
ContainerPlugin::new(
@@ -492,6 +508,18 @@ impl<'a> BuiltinPlugin<'a> {
492508
provides.sort_unstable_by_key(|(k, _)| k.to_string());
493509
plugins.push(ProvideSharedPlugin::new(provides).boxed())
494510
}
511+
BuiltinPluginName::CollectShareEntryPlugin => {
512+
let options = downcast_into::<RawCollectShareEntryPluginOptions>(self.options)
513+
.map_err(|report| napi::Error::from_reason(report.to_string()))?
514+
.into();
515+
plugins.push(CollectShareEntryPlugin::new(options).boxed())
516+
}
517+
BuiltinPluginName::ShareContainerPlugin => {
518+
let options = downcast_into::<RawShareContainerPluginOptions>(self.options)
519+
.map_err(|report| napi::Error::from_reason(report.to_string()))?
520+
.into();
521+
plugins.push(ShareContainerPlugin::new(options).boxed())
522+
}
495523
BuiltinPluginName::ConsumeSharedPlugin => plugins.push(
496524
ConsumeSharedPlugin::new(
497525
downcast_into::<RawConsumeSharedPluginOptions>(self.options)

0 commit comments

Comments
 (0)