Vite良いですね。中身を見ていきます
cliからdev serverを起動するとまずこの辺のcli.action
が呼ばれますね。
.action(async (root: string, options: ServerOptions & GlobalCLIOptions) => {
filterDuplicateOptions(options)
// output structure is preserved even after bundling so require()
// is ok here
const { createServer } = await import('./server')
try {
const server = await createServer({
root,
base: options.base,
mode: options.mode,
configFile: options.config,
logLevel: options.logLevel,
clearScreen: options.clearScreen,
optimizeDeps: { force: options.force },
server: cleanOptions(options),
})
createServer
は dynamic import されてます。
その中身はここ
import { isDepsOptimizerEnabled, resolveConfig } from '../config'
...
export async function createServer(
inlineConfig: InlineConfig = {},
): Promise<ViteDevServer> {
const config = await resolveConfig(inlineConfig, 'serve')
resolveConfig
で設定を解決してます。
で、その中身
import { loadEnv, resolveEnvPrefix } from './env'
...
export async function resolveConfig(
inlineConfig: InlineConfig,
command: 'build' | 'serve',
defaultMode = 'development',
defaultNodeEnv = 'development',
): Promise<ResolvedConfig> {
...
// load .env files
const envDir = config.envDir
? normalizePath(path.resolve(resolvedRoot, config.envDir))
: resolvedRoot
const userEnv =
inlineConfig.envFile !== false &&
loadEnv(mode, envDir, resolveEnvPrefix(config))
ここで loadEnv
が呼ばれています。
その中身
import { parse } from 'dotenv'
import { expand } from 'dotenv-expand'
...
export function loadEnv(
mode: string,
envDir: string,
prefixes: string | string[] = 'VITE_',
): Record<string, string> {
...
}
この中で dotenv
とdotenv
を使ってprocess.env
に環境変数を設定しています。