Vite 插件的 resolveId、load 和 transform 分别做什么?
理解 Vite/Rollup 插件钩子的职责和执行顺序,避免把虚拟模块、源码转换和开发服务器逻辑混在一起。
参考答案
resolveId 负责把导入字符串解析成模块 ID,适合处理别名或虚拟模块;load 根据 ID 提供模块内容;transform 对已加载的源码进行转换。虚拟模块通常需要区分用户可见 ID 与内部使用的唯一 ID,避免与真实文件冲突。
开发服务器还可以通过 configureServer 添加中间件、监听文件和触发更新,但这部分能力不等同于生产构建钩子。插件要分别考虑 dev、build、SSR 和 watch 模式,不能只在一个命令下工作就算完成。
转换插件应保留 source map、限制匹配范围,并避免重复转换或把用户输入直接拼进 JavaScript。插件之间有顺序关系,必要时使用明确的 enforce 配置和测试项目验证。