代码打包是将模块依赖、样式等按规则合并转换为可运行产物,Webpack通过分析依赖图解决浏览器模块化兼容问题,但Vite在新项目中更轻量高效。
代码打包不是把文件 zip 压缩一下,而是把分散的 import、require、模块依赖、样式、资源等,按规则合并、转换、生成能在目标环境(比如浏览器)运行的产物。Webpack 是最常用的打包工具之一,但它不是唯一选择,也不是所有项目都适合用它。
浏览器原生不支持 import 从本地路径加载 JS(比如 import utils from './utils.js'),Node.js 的 require 也不能直接在前端用。Webpack 把这些语句识别出来,分析依赖图,把所有相关代码“翻译”成一个或多个可执行的 .js 文件,并处理路径、变量作用域、导出方式等兼容性问题。
常见错误现象:
Uncaught ReferenceError: require is not defined —— 直接在 HTML 中 script 引入 CommonJS 风格模块Failed to resolve module specifier "lodash" —— 浏览器不理解裸导入(bare import),而 Webpack 可以把它映射到 node_modules/lodash/index.js
实操建议:
package.json(用 npm init -y 快速生成)npm install --save-dev webpack webpack-cli
webpack.config.js,导出对象含 entry 和 output
别一上来就抄 200 行配置。先让代码动起来,再加 loader、plugin。很多构建失败,是因为配置里写了用不到的功能,或者 loader 版本不匹配。
关键点:
entry 是起点,通常是一个 JS 文件路径;output.path 必须是绝对路径(用 path.resolve())mode: 'production',会压缩代码;开发时建议显式设为 'development' 保留 source mapmodule.rules 就无法处理 CSS、TS、图片等——纯 JS 项目可以跳过这一步const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
Webpack 启动慢、配置重、热更新(HMR)有时卡顿,尤其对新项目或以 Vue/React 为主的前端项目,Vite 是更轻量、更快的替代方案。它利用浏览器原生 ES 模块能力,在开发时不做打包,只按需编译单个文件。
使用场景判断:
npm create vite@latest 一行搞定开发中改了代码,刷新页面却还是旧逻辑,大概率不是代码没保存,而是:
bundle.js —— Webpack 开发服务器默认加了 hash,但手动引入时若写死 ,就绕过了缓存控制output.filename 没带 hash,导致浏览器认为文件没变,复用旧缓存HtmlWebpackPlugin 但没启用 inject: true,JS 文件没自动插入 HTML推荐做法:
webpack serve,它自带内存文件系统和 cache bustingfilename: '[name].[contenthash:8].js',内容变了 hash 才变真正麻烦的从来不是“怎么配”,而是“为什么配了还不生效”。查构建日志、看 dist 目录实际输出、对比 network 面板加载的
