部署后样式错乱/功能异常
场景
代码在本地开发环境一切正常,部署到线上后出现样式错乱或功能异常。
面试速答版
本地正常、部署后出问题怎么查? 对比开发/生产环境差异,重点查 CSS 加载顺序、环境变量、资源路径、minify 副作用:
- 开发是
<style>注入、生产是单独提取的 CSS 文件,加载顺序可能不同,用 CSS Modules 隔离。 - 环境变量确认
.env.production正确,构建时注入而非运行时读取。 - 路径:
base/publicPath与 CDN/子路径部署对齐,否则 chunk 404。 - minify 副作用:类名/函数名被压缩,依赖名字反射的库要 keep names。
- 发布前预发冗余环境冗烟测试,发布后立刻回归核心链路。
常见原因与解决
1. CSS 加载顺序不一致
开发模式下 CSS 是 <style> 注入,生产模式是提取的 CSS 文件。加载顺序可能变化导致样式覆盖不同。
✅ 确保 CSS 优先级明确
// 避免依赖加载顺序,使用更高优先级的选择器
// 或使用 CSS Modules / CSS-in-JS 避免冲突
2. 环境变量差异
排查环境变量
// 开发时用的 .env.development,生产用 .env.production
// 检查 API 地址、Feature Flag 等是否正确
console.log('API_BASE:', process.env.VITE_API_BASE);
console.log('NODE_ENV:', process.env.NODE_ENV);
3. 打包压缩导致问题
- minify 导致 class 名变化(CSS Modules hash 不同)
- 代码压缩导致逻辑变化(极少见但可能)
- 开发模式没有 Tree Shaking,生产被摇掉了有副作用的代码
排查方法
// 1. 本地构建后预览
// pnpm build && pnpm preview
// 2. 关闭优化逐步排查
// vite.config.ts
export default defineConfig({
build: {
minify: false, // 先关闭压缩
sourcemap: true, // 开启 sourcemap
},
});
4. 路径问题
检查 base 路径配置
// 部署在子目录时需要配置 base
// vite.config.ts
export default defineConfig({
base: '/my-app/', // 与部署路径一致
});
常见面试问题
Q1: 本地正常线上异常怎么排查?
答案:
- 先本地
build + preview看能否复现 - 检查环境变量、API 地址配置
- 检查 CSS 加载顺序和压缩影响
- 检查 base 路径和资源引用路径
- 开启 source map 查看压缩后的代码