Home / Function/ prepareRolldownOptimizerRun() — vite Function Reference

prepareRolldownOptimizerRun() — vite Function Reference

Architecture documentation for the prepareRolldownOptimizerRun() function in index.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf["prepareRolldownOptimizerRun()"]
  2f328851_91ee_fb05_63f0_4f466b9d6250["index.ts"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|defined in| 2f328851_91ee_fb05_63f0_4f466b9d6250
  b53437fa_d2e4_a560_0d14_dfc84f740176["runOptimizeDeps()"]
  b53437fa_d2e4_a560_0d14_dfc84f740176 -->|calls| 27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf
  60451d3e_8c58_53f5_26c6_c17035d9a884["extractExportsData()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| 60451d3e_8c58_53f5_26c6_c17035d9a884
  1cc52ea9_1097_389c_806c_c1207629afcc["flattenId()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| 1cc52ea9_1097_389c_806c_c1207629afcc
  40f91c1f_e515_2c03_9628_3e4ba2691b70["asyncFlatten()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| 40f91c1f_e515_2c03_9628_3e4ba2691b70
  19ce2051_6a74_4b8b_104d_ec006cd7075f["arraify()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| 19ce2051_6a74_4b8b_104d_ec006cd7075f
  ac03445a_81e1_acd2_c81d_996b0b9b2a16["rolldownCjsExternalPlugin()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| ac03445a_81e1_acd2_c81d_996b0b9b2a16
  9d9d1d96_da01_acb8_5086_7a043722cf91["rolldownDepPlugin()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| 9d9d1d96_da01_acb8_5086_7a043722cf91
  style 27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/optimizer/index.ts lines 751–865

async function prepareRolldownOptimizerRun(
  environment: Environment,
  depsInfo: Record<string, OptimizedDepInfo>,
  processingCacheDir: string,
  optimizerContext: { cancelled: boolean },
): Promise<{
  context?: { build: () => Promise<RolldownOutput>; cancel: () => void }
  idToExports: Record<string, ExportsData>
}> {
  // esbuild generates nested directory output with lowest common ancestor base
  // this is unpredictable and makes it difficult to analyze entry / output
  // mapping. So what we do here is:
  // 1. flatten all ids to eliminate slash
  // 2. in the plugin, read the entry ourselves as virtual files to retain the
  //    path.
  const flatIdDeps: Record<string, string> = {}
  const idToExports: Record<string, ExportsData> = {}

  const { optimizeDeps } = environment.config

  const { plugins: pluginsFromConfig = [], ...rolldownOptions } =
    optimizeDeps.rolldownOptions ?? {}

  let jsxLoader = false
  await Promise.all(
    Object.keys(depsInfo).map(async (id) => {
      const src = depsInfo[id].src!
      const exportsData = await (depsInfo[id].exportsData ??
        extractExportsData(environment, src))
      if (exportsData.jsxLoader) {
        // Ensure that optimization won't fail by defaulting '.js' to the JSX parser.
        // This is useful for packages such as Gatsby.
        jsxLoader = true
      }
      const flatId = flattenId(id)
      flatIdDeps[flatId] = src
      idToExports[id] = exportsData
    }),
  )

  if (optimizerContext.cancelled) return { context: undefined, idToExports }

  const define = {
    'process.env.NODE_ENV': environment.config.keepProcessEnv
      ? // define process.env.NODE_ENV even for keepProcessEnv === true
        // as esbuild will replace it automatically when `platform` is `'browser'`
        'process.env.NODE_ENV'
      : JSON.stringify(process.env.NODE_ENV || environment.config.mode),
    ...rolldownOptions.transform?.define,
  }

  const platform =
    optimizeDeps.rolldownOptions?.platform ??
    // We generally don't want to use platform 'neutral', as esbuild has custom handling
    // when the platform is 'node' or 'browser' that can't be emulated by using mainFields
    // and conditions
    (environment.config.consumer === 'client' ||
    environment.config.ssr.target === 'webworker'
      ? 'browser'
      : 'node')

  const external = [...(optimizeDeps.exclude ?? [])]

  const plugins = await asyncFlatten(arraify(pluginsFromConfig))
  if (external.length) {
    plugins.push(rolldownCjsExternalPlugin(external, platform))
  }
  plugins.push(...rolldownDepPlugin(environment, flatIdDeps, external))

  let canceled = false
  async function build() {
    const bundle = await rolldown({
      ...rolldownOptions,
      input: flatIdDeps,
      logLevel: 'silent',
      plugins,
      platform,
      transform: {
        ...rolldownOptions.transform,
        target: ESBUILD_BASELINE_WIDELY_AVAILABLE_TARGET,
        define,

Subdomains

Called By

Frequently Asked Questions

What does prepareRolldownOptimizerRun() do?
prepareRolldownOptimizerRun() is a function in the vite codebase, defined in packages/vite/src/node/optimizer/index.ts.
Where is prepareRolldownOptimizerRun() defined?
prepareRolldownOptimizerRun() is defined in packages/vite/src/node/optimizer/index.ts at line 751.
What does prepareRolldownOptimizerRun() call?
prepareRolldownOptimizerRun() calls 6 function(s): arraify, asyncFlatten, extractExportsData, flattenId, rolldownCjsExternalPlugin, rolldownDepPlugin.
What calls prepareRolldownOptimizerRun()?
prepareRolldownOptimizerRun() is called by 1 function(s): runOptimizeDeps.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free