Home / Function/ resolvePackageEntry() — vite Function Reference

resolvePackageEntry() — vite Function Reference

Architecture documentation for the resolvePackageEntry() function in resolve.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  ff420344_db87_ddaa_de80_eb7cf9a4644d["resolvePackageEntry()"]
  dcff87b0_a8ea_57a2_3b29_a7b8f19986f3["resolve.ts"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|defined in| dcff87b0_a8ea_57a2_3b29_a7b8f19986f3
  8ac17738_0641_9534_aa4e_c559f410561a["tryCleanFsResolve()"]
  8ac17738_0641_9534_aa4e_c559f410561a -->|calls| ff420344_db87_ddaa_de80_eb7cf9a4644d
  09d0a948_4a89_8bbc_50ce_129fc70dbd66["splitFileAndPostfix()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| 09d0a948_4a89_8bbc_50ce_129fc70dbd66
  c10abc49_1d0c_ffeb_c31f_9afc51ce808b["resolveExportsOrImports()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| c10abc49_1d0c_ffeb_c31f_9afc51ce808b
  5a1e6eac_e85e_4779_6f3b_704e48e41b29["tryResolveBrowserEntry()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| 5a1e6eac_e85e_4779_6f3b_704e48e41b29
  2aff86e8_0c9d_22cb_6536_c1321e1aaa1d["isObject()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| 2aff86e8_0c9d_22cb_6536_c1321e1aaa1d
  8ff08c93_2e0c_c3ed_bfd0_267a77f07273["mapWithBrowserField()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| 8ff08c93_2e0c_c3ed_bfd0_267a77f07273
  2c262e8e_4e5d_80f3_98ab_102647c58f78["tryFsResolve()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| 2c262e8e_4e5d_80f3_98ab_102647c58f78
  1c84a9a4_b284_fb0b_6d25_6df01e35e426["packageEntryFailure()"]
  ff420344_db87_ddaa_de80_eb7cf9a4644d -->|calls| 1c84a9a4_b284_fb0b_6d25_6df01e35e426
  style ff420344_db87_ddaa_de80_eb7cf9a4644d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/plugins/resolve.ts lines 903–991

export function resolvePackageEntry(
  id: string,
  { dir, data, setResolvedCache, getResolvedCache }: PackageData,
  options: InternalResolveOptions,
  externalize?: boolean,
): string | undefined {
  const { file: idWithoutPostfix, postfix } = splitFileAndPostfix(id)

  const cached = getResolvedCache('.', options)
  if (cached) {
    return cached + postfix
  }

  try {
    let entryPoint: string | undefined

    // resolve exports field with highest priority
    // using https://github.com/lukeed/resolve.exports
    if (data.exports) {
      entryPoint = resolveExportsOrImports(
        data,
        '.',
        options,
        'exports',
        externalize,
      )
    }

    // fallback to mainFields if still not resolved
    if (!entryPoint) {
      for (const field of options.mainFields) {
        if (field === 'browser') {
          entryPoint = tryResolveBrowserEntry(dir, data, options)
          if (entryPoint) {
            break
          }
        } else if (typeof data[field] === 'string') {
          entryPoint = data[field]
          break
        }
      }
    }
    entryPoint ||= data.main

    // try default entry when entry is not define
    // https://nodejs.org/api/modules.html#all-together
    const entryPoints = entryPoint
      ? [entryPoint]
      : ['index.js', 'index.json', 'index.node']

    for (let entry of entryPoints) {
      // make sure we don't get scripts when looking for sass
      let skipPackageJson = false
      if (
        options.mainFields[0] === 'sass' &&
        !options.extensions.includes(path.extname(entry))
      ) {
        entry = ''
        skipPackageJson = true
      } else {
        // resolve object browser field in package.json
        const { browser: browserField } = data
        if (options.mainFields.includes('browser') && isObject(browserField)) {
          entry = mapWithBrowserField(entry, browserField) || entry
        }
      }

      const entryPointPath = path.join(dir, entry)
      const resolvedEntryPoint = tryFsResolve(
        entryPointPath,
        options,
        true,
        skipPackageJson,
      )
      if (resolvedEntryPoint) {
        debug?.(
          `[package entry] ${colors.cyan(idWithoutPostfix)} -> ${colors.dim(
            resolvedEntryPoint,
          )}${postfix !== '' ? ` (postfix: ${postfix})` : ''}`,
        )
        setResolvedCache('.', resolvedEntryPoint, options)

Domain

Subdomains

Frequently Asked Questions

What does resolvePackageEntry() do?
resolvePackageEntry() is a function in the vite codebase, defined in packages/vite/src/node/plugins/resolve.ts.
Where is resolvePackageEntry() defined?
resolvePackageEntry() is defined in packages/vite/src/node/plugins/resolve.ts at line 903.
What does resolvePackageEntry() call?
resolvePackageEntry() calls 7 function(s): isObject, mapWithBrowserField, packageEntryFailure, resolveExportsOrImports, splitFileAndPostfix, tryFsResolve, tryResolveBrowserEntry.
What calls resolvePackageEntry()?
resolvePackageEntry() is called by 1 function(s): tryCleanFsResolve.

Analyze Your Own Codebase

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

Try Supermodel Free