webpack和vite
Webpack本质上是一个用于js应用静态模块打包工具。作用是将前端项目中的所有资源通过分析模块之间的依赖关系构建出内部的依赖图最终将这些模块打包成一个或多个浏览器可识别的静态文件Webpack 的工作过程初始化读取配置文件如webpack.config.js加载配置项到内存中。编译从配置的entry入口开始递归分析并构建模块依赖图。遇到非 JS 文件时通过对应的 Loader 进行转换。打包将编译后的模块按 Entry 分组生成 Chunk并根据配置进行代码分割与合并。输出将处理好的 Chunk 转换成最终文件输出到output指定的文件夹。Entry入口Webpack 执行构建的第一步。它指示 Webpack 从哪个模块开始并以此为基础递归构建依赖图。默认入口通常是./src/index.jsOutput输出配置 Webpack 打包后生成的文件存放位置及命名规则。核心配置项包括output.path输出目录和output.filename输出文件名Loader加载器Webpack只能理解 JavaScript 和 JSON。Loader 的作用是让 Webpack 能够处理其他类型的文件如 CSS、图片、TS 等并将它们转换为有效的模块。常用的有babel-loader转译 ES6、css-loader等Plugin插件用于扩展 Webpack 的功能。Plugin 可以介入到整个编译的生命周期中执行更广泛的任务如打包优化、资源管理、生成 HTML 文件等。常用的有HtmlWebpackPlugin、MiniCssExtractPlugin等。Mode模式development开发模式注重构建速度和调试、production生产模式注重代码压缩和体积优化Webpack 性能优化代码分割Code Splitting通过动态import()语法或配置optimization.splitChunks将庞大的代码拆分为多个小文件实现按需加载减小首屏包体积。Tree Shaking剔除未使用的死代码。依赖于 ES6 的静态模块化语法import/export在生产模式下自动生效大幅减小打包体积。构建速度优化为babel-loader开启cacheDirectory缓存编译结果并通过include/exclude明确处理范围。使用 Webpack5 的持久化缓存cache: { type: filesystem }显著提升二次构建速度。缓存策略优化在output.filename中使用[contenthash]替代固定文件名配合浏览器长缓存策略实现静态资源的精准更新与缓存。文件类型常用Loader组合典型配置JavaScriptbabel-loader babel/coreES6转译/JSX处理TypeScriptts-loader fork-ts-checker-webpack-plugin类型检查加速CSSstyle-loader css-loader postcss-loader自动前缀/CSS模块SCSSsass-loader css-loader style-loaderSass编译图片资源url-loader image-webpack-loader自动Base64/压缩优化构建分析工具# 生成分析报告npx webpack --profile --json stats.json# 可视化分析工具npm install --save-dev webpack-bundle-analyzer基础配置const path require(path); const HtmlWebpackPlugin require(html-webpack-plugin); module.exports { // 开发模式配置 mode: development, // 入口配置 entry: { main: ./src/index.js, vendor: [react, react-dom] }, // 输出配置 output: { filename: [name].[contenthash].js, path: path.resolve(__dirname, dist), clean: true }, // 模块处理规则 module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: { loader: babel-loader, options: { presets: [babel/preset-env, babel/preset-react] } } }, { test: /\.css$/, use: [style-loader, css-loader, postcss-loader] }, { test: /\.(png|svg|jpg|jpeg|gif)$/i, type: asset/resource } ] }, // 插件系统 plugins: [ new HtmlWebpackPlugin({ template: ./public/index.html, favicon: ./public/favicon.ico }) ], // 开发服务器 devServer: { static: ./dist, hot: true, historyApiFallback: true, port: 3000 }, // 优化配置 optimization: { splitChunks: { chunks: all, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: vendors, chunks: all } } } } };环境区分// webpack.config.js module.exports (env) { const isProduction env.mode production; return { mode: env.mode || development, devtool: isProduction ? source-map : eval-cheap-module-source-map, plugins: [ new webpack.DefinePlugin({ process.env.NODE_ENV: JSON.stringify(env.mode) }) ] } }ViteVite 是一个由 Vue 作者尤雨溪开发的现代前端构建工具旨在解决传统打包工具如 Webpack在大型项目中冷启动慢、热更新滞后的痛点。Vite 的核心定位是“基于原生 ESM 的极速构建工具”。它的核心设计理念是明确区分开发与生产环境在开发阶段利用浏览器原生 ES 模块实现“无打包Bundleless”和按需编译在生产阶段使用 Rollup 进行高度优化的打包。Vite 为什么比 Webpack 快冷启动快无打包开发模式Webpack启动前需要解析所有依赖构建完整的依赖图并全量打包Bundle-based项目越大启动越慢。Vite启动时几乎零编译。利用现代浏览器原生 ESM 支持浏览器请求哪个模块服务端就实时编译并返回哪个模块ESM 按需编译启动速度不受项目规模影响。热更新HMR快Webpack修改一个文件需要重新构建整个相关的模块依赖树Chunk耗时随项目增大而增加。Vite通过 ESM 边界隔离仅让修改的单个模块失效并重新请求HMR 速度通常在毫秒级与项目规模无关。依赖预构建Vite 在首次启动时会使用esbuildGo 语言编写比 JS 编译器快 10-100 倍对node_modules中的第三方依赖进行预构建。解决两大痛点①格式兼容将 CommonJS/UMD 格式转换为浏览器支持的 ESM 格式②减少请求将内部包含大量小模块的库如 lodash-es合并为一个文件避免浏览器发起数百次 HTTP 请求导致网络崩溃。如何处理 CSSVite 开箱即用支持原生 CSS、CSS Modules文件名带.module.css自动启用、CSS 预处理器安装 sass/less 即可直接 import无需配置 loader以及 PostCSS。如何配置环境变量Vite 使用.env文件如.env.production、.env.test管理环境变量在代码中通过import.meta.env.VITE_XXX访问只有VITE_前缀的变量才会暴露给客户端代码。Vite 的插件系统Vite 的插件系统基于 Rollup 插件 API 设计同时扩展了 Vite 专属的钩子如transformIndexHtml支持在开发环境和生产环境介入自定义逻辑。特性WebpackVite启动机制全量打包按需编译模块系统模拟 CommonJS原生 ESMHMR 效率线性增长恒定时间构建工具自研打包Rollup开发服务器内存文件系统真实文件系统技术栈支持技术支持方式示例配置Vue官方插件vitejs/plugin-vueReact官方插件vitejs/plugin-reactTypeScript原生支持零配置CSS 预处理器内置支持.scss/.less 直接导入静态资源智能处理自动路径处理快速开始# 创建项目npm create vitelatest my-project -- --template vue-ts# 目录结构my-project/├── node_modules├── src/│ ├── main.ts│ ├── App.vue│ └── ...├── index.html├── vite.config.ts└── package.json// vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue export default defineConfig({ plugins: [vue()], resolve: { alias: { : /src } }, server: { proxy: { /api: { target: http://localhost:3000, changeOrigin: true } } }, build: { rollupOptions: { output: { manualChunks: { lodash: [lodash-es] } } } } })性能优化构建优化策略优化方向实现方案配置示例依赖预构建optimizeDeps 配置optimizeDeps: { include: [lodash-es] }代码分割动态 import rollup 配置manualChunks配置图片压缩vite-plugin-imagemin自动 PNG/JPG 优化Gzip 压缩vite-plugin-compression预生成压缩文件加载优化方案// 典型配置组合export default defineConfig({build: {cssCodeSplit: true,assetsInlineLimit: 4096, // 4KB以下资源内联sourcemap: hidden,minify: terser}})推荐使用场景现代浏览器项目Chrome 61, Firefox 60, Safari 11框架新项目Vue3/React18/Svelte库开发利用 Rollup 的纯净打包微前端子应用快速加载需求暂不推荐场景需要支持 IE11 的项目已有复杂 Webpack 配置的大型项目需要深度自定义构建流程的特殊需求

相关新闻

iOS激活锁终极指南:5步免费绕过iPhone限制

iOS激活锁终极指南:5步免费绕过iPhone限制

iOS激活锁终极指南:5步免费绕过iPhone限制 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾经遇到iPhone被激活锁锁定而无法使用的困境?无论是购买的二手设备还是忘记Ap…

2026/9/29 19:50:25 阅读更多 →
WeMod远程控制架构的技术实现与性能优化策略

WeMod远程控制架构的技术实现与性能优化策略

WeMod远程控制架构的技术实现与性能优化策略 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer作为WeMod游戏助手的增强扩展工具&#…

2026/10/2 4:57:08 阅读更多 →
【P8780 [蓝桥杯 2022 省 B] 刷题统计】2025-4-25

【P8780 [蓝桥杯 2022 省 B] 刷题统计】2025-4-25

缘由为什么我的代码用蓝桥杯测试十个只能通过四个&#xff0c;我感觉没什么问题呀_编程语言-CSDN问答 小明周一到周五刷a题&#xff0c;周六周天刷b题&#xff0c;假如小明从周一开始刷题&#xff0c;那么多少天后才能刷大于等于n道题 #include <stdio.h> #include <…

2026/10/4 4:02:51 阅读更多 →

最新新闻

插件机制从原理到排查:plugins加载失败的底层逻辑与工程实践

插件机制从原理到排查:plugins加载失败的底层逻辑与工程实践

“plugins&#xff0c;插件&#xff0c;这个词在软件圈已经算常识&#xff0c;但真正把插件机制弄明白的人其实不多。我的直观感受是&#xff1a;现在群里隔三差五就有人贴报错&#xff0c;比如 failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p&…

2026/10/4 9:14:17 阅读更多 →
我的自我介绍

我的自我介绍

大家好&#xff0c;我是来自重庆的大一新生&#xff0c;学习编程时是我想为了后续学习&#xff0c;竞赛与工作打下基础。希望在基本熟悉c语言后&#xff0c;在日常使用与分享后掌握它&#xff0c;一周我愿意花费10小时以上学习它&#xff0c;谢谢

2026/10/4 9:14:17 阅读更多 →
如何在 KernelSU 上运行 LSPosed:ZygiskNext 完整接入路径

如何在 KernelSU 上运行 LSPosed:ZygiskNext 完整接入路径

如何在 KernelSU 上运行 LSPosed&#xff1a;ZygiskNext 完整接入路径 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 装了 KernelSU 之后&#xff0c;很多用户一上来就卡在同一个问题…

2026/10/4 9:14:17 阅读更多 →
AI生成HTML演示稿转PPTX:实用工具与脚本路线指南

AI生成HTML演示稿转PPTX:实用工具与脚本路线指南

这年头用AI生成PPT已经不是新鲜事——喂一段需求&#xff0c;工具哗啦啦给你吐出一套带着版式和配图的演示稿&#xff0c;看着是真漂亮。但等你把它抱回三尺讲台&#xff0c;或者拿到办公室工位上准备改一版的时候&#xff0c;问题就来了&#xff1a;AI交回来的往往是一个HTML网…

2026/10/4 9:14:17 阅读更多 →
用Dreamweaver高效管理30页静态HTML模板:公共区域、动效与部署实战

用Dreamweaver高效管理30页静态HTML模板:公共区域、动效与部署实战

简介&#xff1a;静态HTML网页制作是文化展示类网站快速落地的轻量方案。理解其“页面即终态”的原理&#xff0c;可避免数据库与后台带来的性能损耗&#xff1b;而多页面站点维护的关键在于公共部分的管理&#xff0c;借助Dreamweaver建站与模板机制&#xff0c;能实现导航、页…

2026/10/4 9:14:17 阅读更多 →
context-mode:开发者如何把丢掉的开发时间抢回来

context-mode:开发者如何把丢掉的开发时间抢回来

在很长一段时间里&#xff0c;我以为影响开发效率的瓶颈是手速和语言熟练度&#xff0c;后来观察自己和团队同事的日常&#xff0c;才意识到真正吃时间的是上下文丢失。你想想这个场景&#xff1a;刚把接口字段理清楚&#xff0c;群里弹出告警&#xff0c;切过去排查二十分钟&a…

2026/10/4 9:13:17 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →