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
Defined In
Calls
Source
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