Home / Function/ bundleConfigFile() — vite Function Reference

bundleConfigFile() — vite Function Reference

Architecture documentation for the bundleConfigFile() function in config.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  f7f3ac4c_520c_5890_698f_e1be179267d2["bundleConfigFile()"]
  7da774f9_eca5_d54e_6e01_6bee7d460a2b["config.ts"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|defined in| 7da774f9_eca5_d54e_6e01_6bee7d460a2b
  de2a20c0_a4a2_f7c1_abd6_414c8a78818e["bundleAndLoadConfigFile()"]
  de2a20c0_a4a2_f7c1_abd6_414c8a78818e -->|calls| f7f3ac4c_520c_5890_698f_e1be179267d2
  fb27ca2e_1576_f57b_b1dd_9bac4dddcf04["isNodeBuiltin()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| fb27ca2e_1576_f57b_b1dd_9bac4dddcf04
  d6281796_ec48_ef52_d544_234c7478aa0f["isNodeLikeBuiltin()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| d6281796_ec48_ef52_d544_234c7478aa0f
  363641b4_de9b_dbe1_f421_1fd46e488386["nodeResolveWithVite()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| 363641b4_de9b_dbe1_f421_1fd46e488386
  10f1d8d4_c841_b248_e3e8_0c71d1233d7b["createImportMetaResolver()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| 10f1d8d4_c841_b248_e3e8_0c71d1233d7b
  dfa2b928_25a4_a78f_1e11_1e7e643cae09["resolve()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| dfa2b928_25a4_a78f_1e11_1e7e643cae09
  f12d281f_62d2_ffd6_7014_ec7f984f1130["collectAllModules()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| f12d281f_62d2_ffd6_7014_ec7f984f1130
  2a568e89_e3e7_9284_fd00_e1a9ca1ec09a["close()"]
  f7f3ac4c_520c_5890_698f_e1be179267d2 -->|calls| 2a568e89_e3e7_9284_fd00_e1a9ca1ec09a
  style f7f3ac4c_520c_5890_698f_e1be179267d2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/config.ts lines 2351–2514

async function bundleConfigFile(
  fileName: string,
  isESM: boolean,
): Promise<{ code: string; dependencies: string[] }> {
  let importMetaResolverRegistered = false

  const root = path.dirname(fileName)
  const dirnameVarName = '__vite_injected_original_dirname'
  const filenameVarName = '__vite_injected_original_filename'
  const importMetaUrlVarName = '__vite_injected_original_import_meta_url'
  const importMetaResolveVarName =
    '__vite_injected_original_import_meta_resolve'
  const importMetaResolveRegex = /import\.meta\s*\.\s*resolve/

  const bundle = await rolldown({
    input: fileName,
    // target: [`node${process.versions.node}`],
    platform: 'node',
    resolve: {
      mainFields: ['main'],
    },
    transform: {
      define: {
        __dirname: dirnameVarName,
        __filename: filenameVarName,
        'import.meta.url': importMetaUrlVarName,
        'import.meta.dirname': dirnameVarName,
        'import.meta.filename': filenameVarName,
        'import.meta.resolve': importMetaResolveVarName,
        'import.meta.main': 'false',
      },
    },
    // disable treeshake to include files that is not sideeffectful to `moduleIds`
    treeshake: false,
    // disable tsconfig as it's confusing to respect tsconfig options in the config file
    // this also aligns with other config loader behaviors
    tsconfig: false,
    plugins: [
      {
        name: 'externalize-deps',
        resolveId: {
          filter: { id: /^[^.#].*/ },
          async handler(id, importer, { kind }) {
            if (!importer || path.isAbsolute(id) || isNodeBuiltin(id)) {
              return
            }

            // With the `isNodeBuiltin` check above, this check captures if the builtin is a
            // non-node built-in, which esbuild doesn't know how to handle. In that case, we
            // externalize it so the non-node runtime handles it instead.
            if (isNodeLikeBuiltin(id) || id.startsWith('npm:')) {
              return { id, external: true }
            }

            const isImport = isESM || kind === 'dynamic-import'
            let idFsPath: string | undefined
            try {
              idFsPath = nodeResolveWithVite(id, importer, {
                root,
                isRequire: !isImport,
              })
            } catch (e) {
              if (!isImport) {
                let canResolveWithImport = false
                try {
                  canResolveWithImport = !!nodeResolveWithVite(id, importer, {
                    root,
                  })
                } catch {}
                if (canResolveWithImport) {
                  throw new Error(
                    `Failed to resolve ${JSON.stringify(
                      id,
                    )}. This package is ESM only but it was tried to load by \`require\`. See https://vite.dev/guide/troubleshooting.html#this-package-is-esm-only for more details.`,
                  )
                }
              }
              throw e
            }
            if (!idFsPath) return
            // always no-externalize json files as rolldown does not support import attributes

Domain

Subdomains

Frequently Asked Questions

What does bundleConfigFile() do?
bundleConfigFile() is a function in the vite codebase, defined in packages/vite/src/node/config.ts.
Where is bundleConfigFile() defined?
bundleConfigFile() is defined in packages/vite/src/node/config.ts at line 2351.
What does bundleConfigFile() call?
bundleConfigFile() calls 7 function(s): close, collectAllModules, createImportMetaResolver, isNodeBuiltin, isNodeLikeBuiltin, nodeResolveWithVite, resolve.
What calls bundleConfigFile()?
bundleConfigFile() is called by 1 function(s): bundleAndLoadConfigFile.

Analyze Your Own Codebase

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

Try Supermodel Free