Home / Function/ definePlugin() — vite Function Reference

definePlugin() — vite Function Reference

Architecture documentation for the definePlugin() function in define.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  c9b245c1_add7_9a08_4f17_a6d03ed5e241["definePlugin()"]
  6e6f4bb4_92d1_caf8_3dbc_8f1aaeb851bd["define.ts"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|defined in| 6e6f4bb4_92d1_caf8_3dbc_8f1aaeb851bd
  85e82af4_ced1_f569_fa46_a75344872da0["createDefinePluginTransform()"]
  85e82af4_ced1_f569_fa46_a75344872da0 -->|calls| c9b245c1_add7_9a08_4f17_a6d03ed5e241
  b1b40b5b_3e43_2197_dea0_d36389d312a1["resolvePlugins()"]
  b1b40b5b_3e43_2197_dea0_d36389d312a1 -->|calls| c9b245c1_add7_9a08_4f17_a6d03ed5e241
  57e41cb2_1bad_972b_7973_7bf6a73527d3["handleDefineValue()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 57e41cb2_1bad_972b_7973_7bf6a73527d3
  28e3e193_a739_1920_1735_eeb2a70f2fde["serializeDefine()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 28e3e193_a739_1920_1735_eeb2a70f2fde
  5e378bd7_4558_94a6_54bf_d9742f54d2e9["escapeRegex()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 5e378bd7_4558_94a6_54bf_d9742f54d2e9
  9b046f45_a2c9_4754_6751_cfb0112161bd["options()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 9b046f45_a2c9_4754_6751_cfb0112161bd
  beb5ece2_d8cc_af46_6f3f_2b3669af4c03["isHTMLRequest()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| beb5ece2_d8cc_af46_6f3f_2b3669af4c03
  ae8703ad_85e4_a4b4_5a15_57955bb1f6ce["isCSSRequest()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| ae8703ad_85e4_a4b4_5a15_57955bb1f6ce
  7740e9c5_c876_c1ec_e6bd_5eac2292d478["isNonJsRequest()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 7740e9c5_c876_c1ec_e6bd_5eac2292d478
  10ecbe47_07f3_0939_0197_7a28bc06f63d["replaceDefine()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 10ecbe47_07f3_0939_0197_7a28bc06f63d
  366b32d1_aeb4_53f8_982f_3ec33281fe7b["getImportMetaEnvKeyRe()"]
  c9b245c1_add7_9a08_4f17_a6d03ed5e241 -->|calls| 366b32d1_aeb4_53f8_982f_3ec33281fe7b
  style c9b245c1_add7_9a08_4f17_a6d03ed5e241 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/plugins/define.ts lines 14–205

export function definePlugin(config: ResolvedConfig): Plugin {
  const isBundled = config.isBundled
  const isBuild = config.command === 'build'
  const isBuildLib = isBuild && config.build.lib

  // ignore replace process.env in lib build
  const processEnv: Record<string, string> = {}
  if (!isBuildLib) {
    const nodeEnv = process.env.NODE_ENV || config.mode
    Object.assign(processEnv, {
      'process.env': `{}`,
      'global.process.env': `{}`,
      'globalThis.process.env': `{}`,
      'process.env.NODE_ENV': JSON.stringify(nodeEnv),
      'global.process.env.NODE_ENV': JSON.stringify(nodeEnv),
      'globalThis.process.env.NODE_ENV': JSON.stringify(nodeEnv),
    })
  }

  // during dev, import.meta properties are handled by importAnalysis plugin.
  const importMetaKeys: Record<string, string> = {}
  const importMetaEnvKeys: Record<string, string> = {}
  const importMetaFallbackKeys: Record<string, string> = {}
  if (isBuild) {
    importMetaKeys['import.meta.hot'] = `undefined`
  }
  if (isBundled) {
    for (const key in config.env) {
      const val = JSON.stringify(config.env[key])
      importMetaKeys[`import.meta.env.${key}`] = val
      importMetaEnvKeys[key] = val
    }
    // these will be set to a proper value in `generatePattern`
    importMetaKeys['import.meta.env.SSR'] = `undefined`
    importMetaFallbackKeys['import.meta.env'] = `undefined`
  }

  function generatePattern(environment: Environment) {
    const keepProcessEnv = environment.config.keepProcessEnv

    const userDefine: Record<string, string> = {}
    const userDefineEnv: Record<string, any> = {}
    for (const key in environment.config.define) {
      userDefine[key] = handleDefineValue(environment.config.define[key])

      // make sure `import.meta.env` object has user define properties
      if (isBuild && key.startsWith('import.meta.env.')) {
        userDefineEnv[key.slice(16)] = environment.config.define[key]
      }
    }

    const define: Record<string, string> = {
      ...(keepProcessEnv ? {} : processEnv),
      ...importMetaKeys,
      ...userDefine,
      ...importMetaFallbackKeys,
    }

    // Additional define fixes based on `ssr` value
    const ssr = environment.config.consumer === 'server'

    if ('import.meta.env.SSR' in define) {
      define['import.meta.env.SSR'] = ssr + ''
    }
    if ('import.meta.env' in define) {
      define['import.meta.env'] = importMetaEnvMarker
    }

    const importMetaEnvVal = serializeDefine({
      ...importMetaEnvKeys,
      SSR: ssr + '',
      ...userDefineEnv,
    })

    // Create regex pattern as a fast check before running esbuild
    const patternKeys = Object.keys(userDefine)
    if (!keepProcessEnv && Object.keys(processEnv).length) {
      patternKeys.push('process.env')
    }
    if (Object.keys(importMetaKeys).length) {
      patternKeys.push('import.meta.env', 'import.meta.hot')

Domain

Subdomains

Frequently Asked Questions

What does definePlugin() do?
definePlugin() is a function in the vite codebase, defined in packages/vite/src/node/plugins/define.ts.
Where is definePlugin() defined?
definePlugin() is defined in packages/vite/src/node/plugins/define.ts at line 14.
What does definePlugin() call?
definePlugin() calls 9 function(s): escapeRegex, getImportMetaEnvKeyRe, handleDefineValue, isCSSRequest, isHTMLRequest, isNonJsRequest, options, replaceDefine, and 1 more.
What calls definePlugin()?
definePlugin() is called by 2 function(s): createDefinePluginTransform, resolvePlugins.

Analyze Your Own Codebase

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

Try Supermodel Free