MCPcopy
hub / github.com/vitejs/vite / clientInjectionsPlugin

Function clientInjectionsPlugin

packages/vite/src/node/plugins/clientInjections.ts:19–64  ·  view source on GitHub ↗
(config: ResolvedConfig)

Source from the content-addressed store, hash-verified

17 * @server-only
18 */
19export function clientInjectionsPlugin(config: ResolvedConfig): Plugin {
20 let injectConfigValues: (code: string) => string
21
22 const getDefineReplacer = perEnvironmentState((environment) => {
23 const userDefine: Record<string, any> = {}
24 for (const key in environment.config.define) {
25 // import.meta.env.* is handled in `importAnalysis` plugin
26 if (!key.startsWith('import.meta.env.')) {
27 userDefine[key] = environment.config.define[key]
28 }
29 }
30 const serializedDefines = serializeDefine(userDefine)
31 const definesReplacement = () => serializedDefines
32 return (code: string) => code.replace(`__DEFINES__`, definesReplacement)
33 })
34
35 return {
36 name: 'vite:client-inject',
37 applyToEnvironment(environment) {
38 return !environment.config.isBundled
39 },
40 async buildStart() {
41 injectConfigValues = await createClientConfigValueReplacer(config)
42 },
43 transform(code, id) {
44 const ssr = this.environment.config.consumer === 'server'
45 const cleanId = cleanUrl(id)
46 if (cleanId === normalizedClientEntry || cleanId === normalizedEnvEntry) {
47 const defineReplacer = getDefineReplacer(this)
48 return defineReplacer(injectConfigValues(code))
49 } else if (!ssr && code.includes('process.env.NODE_ENV')) {
50 // replace process.env.NODE_ENV instead of defining a global
51 // for it to avoid shimming a `process` object during dev,
52 // avoiding inconsistencies between dev and build
53 const nodeEnv =
54 this.environment.config.define?.['process.env.NODE_ENV'] ||
55 JSON.stringify(process.env.NODE_ENV || config.mode)
56 return replaceDefine(this.environment, code, id, {
57 'process.env.NODE_ENV': nodeEnv,
58 'global.process.env.NODE_ENV': nodeEnv,
59 'globalThis.process.env.NODE_ENV': nodeEnv,
60 })
61 }
62 },
63 }
64}
65
66function escapeReplacement(value: string | number | boolean | null) {
67 const jsonValue = JSON.stringify(value)

Callers 1

resolvePluginsFunction · 0.90

Calls 2

perEnvironmentStateFunction · 0.90
serializeDefineFunction · 0.90

Tested by

no test coverage detected