Vitest 并行执行测试文件时靠什么隔离模块状态,什么全局副作用仍会泄漏?
围绕“Vitest 并行执行测试文件时靠什么隔离模块状态,什么全局副作用仍会泄漏”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 worker 进程/线程隔离边界与文件系统、端口等共享资源风险。
构建工具专题面试题第 3 页,显示第 101–150 题,共找到 211 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“Vitest 并行执行测试文件时靠什么隔离模块状态,什么全局副作用仍会泄漏”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 worker 进程/线程隔离边界与文件系统、端口等共享资源风险。
围绕“如何用 vi.importActual 只替换模块的一个导出而保留其余真实实现,这种做法的风险是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答部分 mock 的写法与真实实现漂移风险。
围绕“vi.spyOn 监视对象方法后为什么必须在测试间恢复,不恢复会引发什么跨用例污染”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答原型/实例方法被替换后的泄漏路径与 restoreMocks 配置。
围绕“Vitest 的 toBe、toEqual、toStrictEqual 在比较对象和类实例时行为差异是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答引用相等、递归相等与严格类型比较三档语义。
围绕“Vitest 中 vi.fn() 配合 mockReturnValue 与 mockImplementation 该”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答静态返回与动态实现的选择及多次调用序列模拟。
围绕“Vitest 的 vi.mock() 为什么会被提升到文件顶部,这一提升对工厂函数里引用外部变量有什么限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答 ESM 静态导入与提升导致的变量访问限制及 vi.hoisted 解法。
围绕“tsc --build 与普通 tsc 在增量构建行为上有什么本质差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分按引用拓扑构建与单项目全量编译的行为与适用命令场景;不讲 watch 细节。
围绕“TypeScript 项目引用出现循环依赖时会怎样、应如何拆分”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断循环引用导致的构建失败表现,给出抽取公共底层项目的拆分原则。
区分已有声明文件作为输入、实现文件生成声明和打包复制步骤,解释 declaration、emitDeclarationOnly、noEmit 与发布产物缺失的排查方法。
围绕“noEmit 纯类型检查模式下,构建链路与 tsc 输出职责应如何划分”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断用 tsc 做门禁检查、交给打包器产物的分工与增量缓存影响;不对比具体打包器。
围绕“tsconfig 里 paths 映射不生效时,与 baseUrl 及打包器的关系是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 paths 只影响编译期解析、运行期仍需打包器或运行时同步配置的关键判断;不配置具体打包器。
围绕“TypeScript 项目引用(Project References)解决 monorepo 中的什么核心问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明拆分编译单元、按依赖拓扑增量构建的核心收益;不深入到具体构建编排细节。
围绕“配置项目引用后,为什么源码里的跨包 import 应指向包名而非相对路径到输出目录”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明引用如何让编辑器把依赖包解析到源码或声明输出,避免绕过增量构建。
区分图片 URL、组件和 CSS Modules 映射的导出形状,解释通配声明、资源存在性、加载器配置与更精确的逐文件声明。
围绕“如何用 expect-type 或 vitest 的 expectTypeOf 为类型层面写单元测试”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明类型断言在编译期求值、不产生运行时代码的测试机制与断言粒度;不对比所有类型测试库。
围绕“TypeScript 中如何安全地处理 JSON.parse 的结果(通常为 any)以转换为 unknown 并收”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出类型守卫或逐步收窄的示例,构建运行时校验,避免讨论泛型 parse<T>() 的过度信任。
围绕“如何用泛型构建一个函数,返回对象的指定键的值,同时保留类型关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需使用 T extends object 和 K extends keyof T。
围绕“Vite 的 assetsInlineLimit 如何决定静态资源是内联为 base64 还是输出为文件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出小于阈值内联减少请求、Git LFS 等例外及如何强制排除。
围绕“Vite 的 base 配置影响哪些路径,部署到子路径或用相对 base './' 各自有什么注意点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 base 决定产物资源 URL 前缀及相对 base 对动态导入/SSR 的限制。
围绕“Vite 构建时 sourcemap 有哪几种配置值,hidden 模式适用于什么发布流程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 true/'hidden'/'inline' 的差异及 hidden 配合错误监控平台上传的流程。
围绕“Vite 的 build.target 决定什么,为什么不直接用 browserslist”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 target 控制语法降级与 esbuild 转译目标、默认 'modules' 基线,以及与 browserslist 的关。
围绕“Vite 生产构建的 chunk 是如何拆分的,什么时候需要用 manualChunks 手动控制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 Rollup 默认动态导入拆 chunk 的行为及 manualChunks 解决循环依赖/缓存优化的场景。
围绕“Vite 应用构建时 CSS 代码分割如何避免异步 chunk 加载时的样式闪烁(FOUC)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 Vite 将异步 chunk 的 CSS 与其 JS 加载绑定、保证样式就绪后再执行的机制。
围绕“Vite 在开发中发现未预构建的新依赖时为什么会整页刷新”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出依赖发现延迟导致哈希变化、已有预构建产物失效需 full reload 的机制。
围绕“Vite 中动态 import() 如何实现路由级代码分割,魔法注释式的 chunk 命名是否可用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出动态导入产生独立 chunk、变量导入的受限分析与 chunkFileNames 命名方式。
围绕“Vite 的 .env、.env.local、.env.[mode] 等文件加载优先级是怎样的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出各文件的加载顺序与覆盖规则及 local 文件不入库的实践。
围绕“如何为 Vite 的自定义环境变量获得 TypeScript 类型提示”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出扩展 ImportMetaEnv 接口与 vite/client 类型引用的做法。
围绕“Vite 为什么默认只暴露 VITE_ 前缀的环境变量到客户端代码”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出防止密钥意外打入客户端 bundle 的安全考虑及 envPrefix 的修改方式。
围绕“Vite 为什么在开发期用 esbuild 而生产构建用 Rollup”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 esbuild 的 Go 实现速度优势与 Rollup 插件生态/输出灵活性的取舍,不列举两者所有特性差异。
围绕“Vite 的 import.meta.glob 与普通动态 import 相比解决了什么问题,eager 选项改变什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 glob 按模式批量生成导入映射及 eager 转静态导入的效果与 tree-shaking 影响。
围绕“Vite HMR 中 import.meta.hot.accept 的边界如何决定更新冒泡范围”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出模块自身/依赖 accept 的判定规则和冒泡到整页刷新的条件。
围绕“如何在 Vite 中用 hot.on / hot.send 实现自定义的 HMR 事件通信”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出服务端 ws.send 与客户端 hot.on 配对实现自定义事件的流程。
围绕“哪些改动会让 Vite HMR 退化为整页刷新(full reload)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出无 accept 边界、config 文件变化、某些插件返回的失效等触发条件。
围绕“Vite HMR API 中 hot.invalidate 与 hot.prune 各自用于什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 invalidate 强制当前模块重新执行、prune 处理模块从依赖图中移除时的资源清理。
围绕“Vite 中 import.meta.env 的访问是如何在构建期被静态替换的,动态键名为什么取不到值”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出构建期静态字符串替换机制导致 import.meta.env[key] 动态访问失效。
围绕“Vite 默认构建不处理 API polyfill,需要兼容旧浏览器时应该怎么做”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 build.target 只管语法不管 API 的边界及 @vitejs/plugin-legacy/core-js 的方案。
围绕“Vite 库模式构建时 CSS 是如何处理的,cssCodeSplit 对库产物有什么影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出库模式下 CSS 默认打进单文件/按 chunk 拆分的行为差异及 cssCodeSplit 的取舍。
围绕“用 Vite 构建组件库时为什么要把 react 等依赖 external 掉,如何实现”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出避免把宿主依赖打进产物造成重复实例的问题及 rollupOptions.external/peerDependencies 的配。
围绕“Vite 库模式下如何配置多入口与输出格式(es/cjs/umd)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 build.lib 的 entry 多入口对象、formats 与 fileName 函数的配置方式。
围绕“配合 Vite 库模式,package.json 的 main/module/exports/types 字段应如何”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出各字段与产物文件名对应关系及 types 优先的解析顺序。
围绕“为什么在 vite.config.ts 中不能直接访问 .env 变量,loadEnv 的正确用法是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出配置加载早于 env 注入的时序问题及 loadEnv(mode, cwd) 的用法。
围绕“Vite 构建压缩默认用 esbuild,什么时候需要切换到 terser”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 esbuild 速度快与 terser 压缩率/高级混淆能力的取舍及切换成本。
围绕“Vite 中 mode 与 NODE_ENV 有什么区别,--mode staging 会影响什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 mode 决定 env 文件与 import.meta.env.MODE,NODE_ENV 控制包的行为分支及二者默认值。
围绕“Vite 构建产物中的 modulepreload 与 modulepreload polyfill 各自起什么作用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 Vite 为入口和动态导入注入 preload 以并行化请求,及 polyfill 兼容不支持 modulepreload 的。
围绕“在 monorepo 中,为什么被 link 的本地包在 Vite 里默认不会被预构建,如何修正”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 linked 包不被预构建的默认行为及 build.commonjsOptions/optimizeDeps.include 。
围绕“Vite 中 new URL('./img.png', import.meta.url) 这种资源引用方式解决什么问”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出其对动态路径资源做静态分析与打包的机制及适用场景(如 worker、模板字符串拼接的限制)。
围绕“什么场景下需要配置 Vite 的 optimizeDeps.include 和 exclude”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 include 处理未在入口静态引入的依赖、exclude 保留为原生 ESM 等判断标准。
围绕“如何让一个 Vite 插件只在开发或只在构建时生效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出插件 apply: 'serve'/'build' 或函数形式按 command 判断的做法。
围绕“Vite 插件中 config 钩子与 configResolved 钩子的职责分别是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 config 用于修改/追加配置(可被合并)、configResolved 拿到最终配置做初始化。
围绕“Vite 插件的 enforce: 'pre'/'post' 以及钩子执行顺序如何影响转换结果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要答出 alias/用户 pre/核心/普通/post/构建插件的排序规则及典型使用场景。