第九章:Vite API 参考手册

第九章:Vite API 参考手册

9.1 核心 API

createServer

创建 Vite 开发服务器

javascript 复制代码
import { createServer } from 'vite'

const server = await createServer({
  configFile: false,
  root: __dirname,
  server: { port: 3000 }
})

await server.listen()
console.log('服务器启动在', server.config.server.port)

build

以编程方式构建

javascript 复制代码
import { build } from 'vite'

await build({
  root: './',
  build: {
    outDir: 'dist',
    rollupOptions: {
      input: 'index.html'
    }
  }
})

resolveConfig

解析配置

javascript 复制代码
import { resolveConfig } from 'vite'

const config = await resolveConfig({}, 'build', 'production')
console.log(config.base)

9.2 插件 API

Plugin 接口

typescript 复制代码
interface Plugin {
  name: string
  
  // 钩子
  buildStart?: (options: InputOptions) => void
  resolveId?: (source: string, importer: string | undefined) => string | null
  load?: (id: string) => string | null
  transform?: (code: string, id: string) => TransformResult
  buildEnd?: () => void
  generateBundle?: (options: OutputOptions, bundle: { [fileName: string]: OutputAsset | OutputChunk }) => void
  
  // Vite 特有
  config?: (config: UserConfig, env: { command: string, mode: string }) => UserConfig | null
  configResolved?: (config: ResolvedConfig) => void
  configureServer?: (server: ViteDevServer) => void
  transformIndexHtml?: (html: string, ctx: TransformIndexHtmlContext) => string | HtmlTagDescriptor[]
  handleHotUpdate?: (ctx: HmrContext) => ModuleNode[] | void
}

TransformResult

typescript 复制代码
interface TransformResult {
  code: string
  map?: SourceMap | null
  deps?: string[]
}

9.3 配置 API

defineConfig

javascript 复制代码
import { defineConfig } from 'vite'

export default defineConfig({
  // 配置项
})

// 异步配置
export default defineConfig(async ({ command, mode }) => {
  const plugins = await import('./plugins')
  return {
    plugins: [plugins.default()]
  }
})

loadConfigFromFile

javascript 复制代码
import { loadConfigFromFile } from 'vite'

const { config, deps } = await loadConfigFromFile({
  command: 'serve',
  mode: 'development'
}, './vite.config.js')

9.4 开发服务器 API

ViteDevServer 接口

typescript 复制代码
interface ViteDevServer {
  config: ResolvedConfig
  middlewares: Connect.Server
  
  listen(port?: number, isRestart?: boolean): Promise<ViteDevServer>
  close(): Promise<void>
  
  transformRequest(url: string, options?: TransformOptions): Promise<ModuleNode | null>
  
  ws: WebSocketServer
  
  moduleGraph: ModuleGraph
  pluginContainer: PluginContainer
  
  hotUpdate(module: ModuleNode): Promise<void>
}

使用示例

javascript 复制代码
const server = await createServer()

// 添加自定义中间件
server.middlewares.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`)
  next()
})

// 监听 WebSocket 消息
server.ws.on('connection', (socket) => {
  console.log('客户端连接')
})

await server.listen()

9.5 模块图 API

ModuleNode

typescript 复制代码
interface ModuleNode {
  id: string
  file: string
  url: string
  
  importers: Set<ModuleNode>
  importedModules: Set<ModuleNode>
  
  transformResult: TransformResult | null
  ssrTransformResult: TransformResult | null
  
  lastHMRTimestamp: number
  
  acceptHmrDeps: Set<ModuleNode>
  acceptedHmrDeps: Set<ModuleNode>
}

访问模块图

javascript 复制代码
const modules = server.moduleGraph.getModules()
for (const module of modules) {
  console.log(module.id, module.importedModules.size)
}

9.6 插件容器 API

typescript 复制代码
interface PluginContainer {
  resolveId(id: string, importer?: string): Promise<string | null>
  load(id: string): Promise<LoadResult | null>
  transform(code: string, id: string): Promise<TransformResult | null>
  
  buildStart(options: InputOptions): Promise<void>
  buildEnd(): Promise<void>
}

9.7 工具函数

normalizePath

路径规范化

javascript 复制代码
import { normalizePath } from 'vite'

const path = normalizePath('src\\components\\Button.vue')
// 'src/components/Button.vue'

createLogger

创建日志器

javascript 复制代码
import { createLogger } from 'vite'

const logger = createLogger('info')
logger.info('信息消息')
logger.warn('警告消息')
logger.error('错误消息')

isCSSRequest

检查是否为 CSS 请求

javascript 复制代码
import { isCSSRequest } from 'vite'

if (isCSSRequest(id)) {
  console.log('这是 CSS 文件')
}

9.8 环境变量 API

loadEnv

加载环境变量

javascript 复制代码
import { loadEnv } from 'vite'

const env = loadEnv('development', process.cwd(), 'VITE')
console.log(env.VITE_API_URL)

envPrefix

typescript 复制代码
envPrefix: 'VITE_'  // 默认,只有 VITE_ 开头的变量暴露

9.9 预构建 API

optimizeDeps

javascript 复制代码
import { optimizeDeps } from 'vite'

await optimizeDeps({
  config: {
    root: process.cwd(),
    optimizeDeps: {
      include: ['vue', 'vue-router']
    }
  }
})

9.10 热更新 API

HmrContext

typescript 复制代码
interface HmrContext {
  file: string
  timestamp: number
  modules: ModuleNode[]
  read: () => string | Promise<string>
  server: ViteDevServer
}

自定义 HMR

javascript 复制代码
handleHotUpdate({ file, server, modules }) {
  if (file.endsWith('.custom')) {
    server.ws.send({
      type: 'custom',
      event: 'custom-update',
      data: { file }
    })
    return []
  }
  return modules
}

9.11 构建 API

build 选项

typescript 复制代码
interface BuildOptions {
  target?: 'modules' | string[]
  outDir?: string
  assetsDir?: string
  assetsInlineLimit?: number
  cssCodeSplit?: boolean
  sourcemap?: boolean | 'inline' | 'hidden'
  rollupOptions?: RollupOptions
  minify?: boolean | 'esbuild' | 'terser'
  terserOptions?: TerserOptions
  write?: boolean
  emptyOutDir?: boolean
  manifest?: boolean | string
  lib?: LibraryOptions
  ssr?: boolean | string
  ssrManifest?: boolean | string
}

9.12 服务器选项

ServerOptions

typescript 复制代码
interface ServerOptions {
  host?: string | boolean
  port?: number
  strictPort?: boolean
  https?: boolean | HttpsOptions
  open?: boolean | string
  proxy?: Record<string, string | ProxyOptions>
  cors?: CorsOptions | boolean
  headers?: Record<string, string>
  fs?: {
    strict?: boolean
    allow?: string[]
  }
  hmr?: HmrOptions | boolean
  watch?: WatchOptions
  middlewareMode?: boolean
}

9.13 预构建选项

DepOptimizationOptions

typescript 复制代码
interface DepOptimizationOptions {
  include?: string[]
  exclude?: string[]
  entries?: string[]
  esbuildOptions?: EsbuildOptions
  force?: boolean
}

9.14 完整类型定义

所有类型定义都可以从 Vite 包中导入:

typescript 复制代码
import type { 
  UserConfig, 
  ConfigEnv, 
  Plugin, 
  ViteDevServer,
  BuildOptions,
  ServerOptions,
  DepOptimizationOptions
} from 'vite'

本章小结

API 参考手册提供了 Vite 的核心 API 文档:

  • 编程方式使用 Vite
  • 插件开发接口
  • 开发服务器控制
  • 模块图操作
  • 工具函数

这些 API 可用于构建工具、插件和自动化脚本。

相关推荐
程序员黑豆1 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC2 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea2 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望2 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少3 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0073 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis4 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝5 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师5 小时前
新兴多智能体系统的模式与问题
前端
用户059540174466 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css