跳到正文
前端知识库
工程化

webpack 高频追问 Q&A

A: Loader 处理模块内容转换,Plugin 介入构建生命周期做扩展。(深入阅读:Loader 和 Plugin 的区别、编写 Loader 与 Plugin)

3 分钟

webpack 高频追问 Q&A

1. Q: Loader 和 Plugin 本质区别?

A: Loader 处理模块内容转换,Plugin 介入构建生命周期做扩展。(深入阅读:Loader 和 Plugin 的区别编写 Loader 与 Plugin

2. Q: HMR 为什么能只更新局部?

A: 模块热替换基于依赖图定位变更边界并推送更新。(深入阅读:webpack 热更新原理

3. Q: Tree Shaking 依赖什么前提?

A: ESM 静态结构和 production 模式优化。(深入阅读:代码分割与 Tree Shakingwebpack 面试进阶详解:Tree Shaking

4. Q: 构建慢怎么排查?

A: 先看耗时插件/loader,再看缓存、并行和拆分策略。(深入阅读:优化 webpack 构建速度bundle 体积监控与分析

5. Q: 为什么还在用 webpack?

A: 历史项目深度定制多、生态兼容成熟、迁移成本高。(深入阅读:webpack 基础知识速览webpack 与 Vite 选型

6. Q: CompilerCompilation 有什么区别?

A: Compiler 管整个构建器的生命周期,Compilation 表示某一次构建的模块、Chunk 和 assets。插件通常从 Compiler 进入,再在具体 Compilation 上读取或修改本次构建数据。(深入阅读:webpack 构建流程编写 Plugin 的思路

7. Q: HMR 为什么有时会整页刷新?

A: 更新链路上没有可接受的 HMR 边界,或运行时判断模块无法安全替换,就会回退刷新;还要检查 WebSocket、更新 manifest/chunk 和 Loader 的 HMR 支持。(深入阅读:webpack 热更新原理文件监听原理

8. Q: sideEffects: false 可以随便加吗?

A: 不可以。含全局样式、Polyfill、注册行为或导入即执行逻辑的模块不能被当作无副作用模块,否则 Tree Shaking 可能删除必需代码。(深入阅读:webpack 面试进阶详解:sideEffects代码分割与 Tree Shaking

9. Q: hashchunkhashcontenthash 怎么选?

A: hash 反映整个构建,chunkhash 反映 Chunk,contenthash 反映单个资源内容。长期缓存的 JS/CSS 通常优先 contenthash。(深入阅读:文件指纹的原理与使用

10. Q: DevServer Proxy 为什么能解决本地跨域?

A: 浏览器只请求同源的开发服务器,由服务器进程再转发到目标 API;浏览器同源策略不会限制这段服务器到服务器的转发,但它不替代生产 CORS、鉴权或 CSRF 配置。(深入阅读:[webpack proxy 工作原理](/工程化/webpack/04-说说webpack proxy工作原理?为什么能解决跨域?))

11. Q: 生产环境为什么不能无条件公开 Source Map?

A: 完整 Source Map 可能暴露源码和构建路径。应按错误监控需求选择受限方案,控制 .map 访问,并保证产物与映射文件版本一致。(深入阅读:Source Map 原理与选型