ModuleGraph Class — vite Architecture
Architecture documentation for the ModuleGraph class in mixedModuleGraph.ts from the vite codebase.
Entity Profile
Dependency Diagram
graph TD c1a5c030_6aae_0cbb_cc67_256559724512["ModuleGraph"] cd2f5017_5d73_e10a_7c43_22b962517f0c["mixedModuleGraph.ts"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|defined in| cd2f5017_5d73_e10a_7c43_22b962517f0c c0aa07ef_4d55_81af_2c31_675206f54019["_client()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| c0aa07ef_4d55_81af_2c31_675206f54019 fda3ee91_e2ce_c6c4_8e7d_df72bc36899c["_ssr()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| fda3ee91_e2ce_c6c4_8e7d_df72bc36899c 3acdf189_b419_0a41_c750_a3225ac83e3d["constructor()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 3acdf189_b419_0a41_c750_a3225ac83e3d b9c8cc4b_5575_ccfe_9243_d12c9ec34e91["getModuleById()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| b9c8cc4b_5575_ccfe_9243_d12c9ec34e91 bb2dfb3b_2e6d_7715_aedc_b7f63a711219["getModuleByUrl()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| bb2dfb3b_2e6d_7715_aedc_b7f63a711219 98b45b52_fdf0_c791_ef33_cf0bce10f788["getModulesByFile()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 98b45b52_fdf0_c791_ef33_cf0bce10f788 217003c7_7ef6_1189_ea67_68b8e94a636e["onFileChange()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 217003c7_7ef6_1189_ea67_68b8e94a636e 203367d7_c98f_d7fc_5ab5_bbf0df602fe2["onFileDelete()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 203367d7_c98f_d7fc_5ab5_bbf0df602fe2 1c40d8da_e1ab_2df6_f9b3_a9ddbed0bb4b["_getModuleGraph()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 1c40d8da_e1ab_2df6_f9b3_a9ddbed0bb4b f3ee260b_149d_7a3c_7489_7c6e940fce67["invalidateModule()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| f3ee260b_149d_7a3c_7489_7c6e940fce67 699e7c37_64e5_966a_fd87_42a032acb6af["invalidateAll()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 699e7c37_64e5_966a_fd87_42a032acb6af 1d65aaf8_13f0_8f65_96f9_9d8c05b8369a["ensureEntryFromUrl()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 1d65aaf8_13f0_8f65_96f9_9d8c05b8369a b9490db6_4909_a1e6_c6d4_5948602ea2f9["createFileOnlyEntry()"] c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| b9490db6_4909_a1e6_c6d4_5948602ea2f9
Relationship Graph
Source Code
packages/vite/src/node/server/mixedModuleGraph.ts lines 248–518
export class ModuleGraph {
/** @internal */
_moduleGraphs: {
client: () => EnvironmentModuleGraph
ssr: () => EnvironmentModuleGraph
}
/** @internal */
get _client(): EnvironmentModuleGraph {
return this._moduleGraphs.client()
}
/** @internal */
get _ssr(): EnvironmentModuleGraph {
return this._moduleGraphs.ssr()
}
urlToModuleMap: Map<string, ModuleNode>
idToModuleMap: Map<string, ModuleNode>
etagToModuleMap: Map<string, ModuleNode>
fileToModulesMap: Map<string, Set<ModuleNode>>
private moduleNodeCache = new DualWeakMap<
EnvironmentModuleNode,
EnvironmentModuleNode,
ModuleNode
>()
constructor(moduleGraphs: {
client: () => EnvironmentModuleGraph
ssr: () => EnvironmentModuleGraph
}) {
this._moduleGraphs = moduleGraphs
const getModuleMapUnion =
(prop: 'urlToModuleMap' | 'idToModuleMap') => () => {
// A good approximation to the previous logic that returned the union of
// the importedModules and importers from both the browser and server
if (this._ssr[prop].size === 0) {
return this._client[prop]
}
const map = new Map(this._client[prop])
for (const [key, module] of this._ssr[prop]) {
if (!map.has(key)) {
map.set(key, module)
}
}
return map
}
this.urlToModuleMap = createBackwardCompatibleModuleMap(
this,
'urlToModuleMap',
getModuleMapUnion('urlToModuleMap'),
)
this.idToModuleMap = createBackwardCompatibleModuleMap(
this,
'idToModuleMap',
getModuleMapUnion('idToModuleMap'),
)
this.etagToModuleMap = createBackwardCompatibleModuleMap(
this,
'etagToModuleMap',
() => this._client.etagToModuleMap,
)
this.fileToModulesMap = createBackwardCompatibleFileToModulesMap(this)
}
getModuleById(id: string): ModuleNode | undefined {
const clientModule = this._client.getModuleById(id)
const ssrModule = this._ssr.getModuleById(id)
if (!clientModule && !ssrModule) {
return
}
return this.getBackwardCompatibleModuleNodeDual(clientModule, ssrModule)
}
async getModuleByUrl(
url: string,
_ssr?: boolean,
Domain
Source
Frequently Asked Questions
What is the ModuleGraph class?
ModuleGraph is a class in the vite codebase, defined in packages/vite/src/node/server/mixedModuleGraph.ts.
Where is ModuleGraph defined?
ModuleGraph is defined in packages/vite/src/node/server/mixedModuleGraph.ts at line 248.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free