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/8/4 20:48:18 阅读更多 →
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/8/4 20:48:18 阅读更多 →
【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/8/4 20:48:18 阅读更多 →

最新新闻

Linux网卡绑定技术详解:原理、模式与配置实践

Linux网卡绑定技术详解:原理、模式与配置实践

1. 为什么需要网卡绑定&#xff08;Bonding&#xff09;&#xff1f;在现代服务器架构中&#xff0c;网络连接的可靠性和带宽需求日益增长。单块网卡不仅存在单点故障风险&#xff0c;也无法满足高吞吐量应用的需求。网卡绑定&#xff08;Bonding&#xff09;技术通过将多块物理…

2026/8/6 1:08:29 阅读更多 →
疾病症状和患者概况数据集

疾病症状和患者概况数据集

摘要&#xff1a;疾病症状和患者概况数据集&#xff08;CSV&#xff09;包含 10 列特征涵盖 100 多种疾病&#xff0c;MIT 许可证&#xff0c;可用性 10.00/10&#xff0c;专为临床分析、疾病诊断预测和医疗 AI 模型训练而构建。数据集简介数据集概述疾病症状和患者概况数据集是…

2026/8/6 1:08:29 阅读更多 →
终极指南:如何为macOS版百度网盘解锁SVIP体验与下载加速

终极指南:如何为macOS版百度网盘解锁SVIP体验与下载加速

终极指南&#xff1a;如何为macOS版百度网盘解锁SVIP体验与下载加速 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘的龟速下载而烦恼吗…

2026/8/6 1:08:29 阅读更多 →
基于大语言模型的交互式叙事系统:本地部署与AI角色扮演实践

基于大语言模型的交互式叙事系统:本地部署与AI角色扮演实践

这次我们来看一个名为“我捡回失忆男子当压寨夫君欺负三月&#xff0c;谁知他是微服太子&#xff0c;恢复记忆后绑我回东宫&#xff0c;满墙画像藏着思念&#xff0c;开启身份反转的甜蜜搞笑爱恋”的项目。从标题来看&#xff0c;这并非一个传统的技术工具或开源模型&#xff0…

2026/8/6 1:07:29 阅读更多 →
Cocos Creator飞机大战实战:模块化架构、对象池优化与多平台广告集成

Cocos Creator飞机大战实战:模块化架构、对象池优化与多平台广告集成

1. 项目概述&#xff1a;从源码到可运营的飞机大战最近有不少朋友在找Cocos Creator开发的飞机大战小游戏源码&#xff0c;而且特别强调要“支持流量主”和“可编译各大平台”。这其实反映了一个很实际的需求&#xff1a;大家不再满足于仅仅学习一个游戏Demo&#xff0c;而是希…

2026/8/6 1:07:29 阅读更多 →
Cocos Creator飞机大战游戏开发:多平台发布与广告变现实战指南

Cocos Creator飞机大战游戏开发:多平台发布与广告变现实战指南

1. 项目概述与核心价值最近在整理过往项目时&#xff0c;翻出了一个用 Cocos Creator 2.4.x 版本开发的《飞机大战》小游戏源码。这个项目麻雀虽小&#xff0c;但五脏俱全&#xff0c;不仅实现了经典飞机大战的核心玩法&#xff0c;更重要的是&#xff0c;它从一开始的设计就考…

2026/8/6 1:07:29 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述&#xff1a;为什么我们需要深入LimboAI的C内核&#xff1f;如果你是一名使用Godot引擎的游戏开发者&#xff0c;尤其是对AI行为逻辑有较高要求的项目&#xff0c;那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好&#xff0c;我是老张&#xff0c;一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架&#xff0c;处理了角色移动和碰撞&#xff0c;这一期&#xff0c;我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延&#xff0c;无需电控启动&#xff0c;是建筑被动消防系统核心构件&#xff0c;行业依托新规管控、城市更新、工业安全升级迎来稳定扩容&#xff0c;整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →