0

0

Webpack的经验分享

小云云

小云云

发布时间:2018-02-02 14:28:06

|

1921人浏览过

|

来源于php中文网

原创

webpack 是一个模块打包器。它的主要目标是将 javascript文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package),本文主要和大家分享webpack 的一些经验,希望能帮助到大家。

缓存

生成文件名 [name].[contenthash:8].js,结合 max-age + cdn 做缓存。

网页加载

html

以前是固定的一个 html, html -》版本号 js 文件(通过webpack打出来的)-》通过版本号确定具体 js。(现在想想不太合理,虽然没和后台耦合这么重)

现在是变动的 html,通过 HtmlWebpackPlugin 打出来(webpack 生成,里面包含版本号的 js)

这样还省了一个串行时间(拉版本号文件)。 同时也便于做灰度,比如发布了需求,让一部分用户先体验,动态打出 html 给到后台即可。(固定 html 则没这么轻松做)

css分离

在观麦,css变动会非常的少,这得益于 react-gm 对类名的完善。 既然变动少,把 css 单独出来也不错,使用 ExtractTextPlugin 分离 css。

分离后减少 js 大小,不阻塞 js,同时 css 和 js 可同时拉取。

common

new CommonsChunkPlugin({name: 'commons'})

看打包后的 common 代码,会发现其他模块的id和hash都会打在common中,这样每次 commons 文件都会变,就很难做缓存了。

提供两个文件列表即可,会发现 webpack 吧 id 和 hash 打在 manifest 文件中。这样commons就可以缓存了。btw,没看到官网有介绍,看到的说声。

new CommonsChunkPlugin({names: ['commons', 'manifest']})

本地开发

讲讲代理,本地开始是自己起的服务,没有后台服务,自然需要代理到某个地方。 可通过 devServer.proxy 。也可代理到外网排查 bug,都是源码,查 bug 非常快。

"proxy": {
    "/ticket/*": {
      "target": "http://dev.guanmai.cn:7413",
      "changeOrigin": true
    }
}

打包速度

DllPlugin

当项目大了后,必然需要打很多包,导致打包时间非常长。 官方推荐做法是把不常变动的文件打DLL。

我们工程就把  react react-dom prop-types classnames mobx mobx-react lodash moment big.js 等打进来。

网上资料都介绍 dll 的 文件名是 [name]_[hash].dll.js, 我们是 [npm version]_dll.js npm version 是 package.json version 读进来的。

为什么不用 hash 而是 npm version?我们在思考二次打包的时候遇到了问题,怎么判断 dll 是否需要重新打包?如果是 hash 怎么搞(求推荐方案)。用 npm version 的话只要 version 一改变我们会重新打包,比如升级了 react ,我们就会 version +,就会重新打包。

happypack

happypack 对 build 的速度大大大提示,可以多线程打包,cache 也让 rebuild 加快。

BJXSHOP网上开店专家
BJXSHOP网上开店专家

BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛

下载

devtool

开发用 eval,生产用 source-map(用于排查显示问题,牺牲了打包速度,在可接受范围内)

babel-loader

记得 cacheDirectory

noParse && alias

有些库不需要解析的,noParse 配置不解析,同时 alias 指向 x.min.js 文件。

tree shaking

没有用上,感觉还不是时候。有篇文章不错 你的Tree-Shaking并没有什么卵用

压缩

UglifyJsPlugin

一开始用的是 webpack.optimize.UglifyJsPlugin,那时 1.x 版本,webpack 基于 uglify-js@2.x。

现在 webpack 单独出来了, 也多了很多功能,支持 cache ,支持多核压缩,我试用了下速度还是挺快的。webpack.optimize.UglifyJsPlugin 实际上是 uglifyjs-webpack-plugin。

令我奇怪的是官方说基于 uglify-es 。可我看依赖还是 uglify-js。奇怪。

UglifyJsParallelPlugin

在官方没出来前用的是 webpack-uglify-parallel , 支持多核。速度和 uglifyjs-webpack-plugin 差不了多少。

写文章是翻了下 github,发现7月份的时候开始废弃了,集成到官方了。

其他

babel 出的 babel-minify-webpack-plugin,保持观望。

脚本cdn

有些 js(gm-fetch babel-polyfill) 实在是非常少非常少变动,用 webpack 打包有点浪费,可以通过 cdn 获取,script 形式放入 html 文档内。

分析

有图表,非常直观的分析。我比较喜欢。
webpack-monitor

老牌的是 webpack-bundle-analyzer

相关推荐:

Web使用webpack构建前端项目的实例代码

webpack配置方法小结

node.js中的npm和webpack配置方法详解

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法
Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法

本专题系统整理Steam官网最新可用入口,涵盖网页版登录地址、新用户注册流程、账号登录方法及官方游戏商店访问说明,帮助新手玩家快速进入Steam平台,完成注册登录并管理个人游戏库。

18

2026.02.25

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

15

2026.02.25

Python数据处理流水线与ETL工程实战
Python数据处理流水线与ETL工程实战

本专题聚焦 Python 在数据工程场景下的实际应用,系统讲解 ETL 流程设计、数据抽取与清洗、批处理与增量处理方案,以及数据质量校验与异常处理机制。通过构建完整的数据处理流水线案例,帮助开发者掌握数据工程中的性能优化思路与工程化规范,为后续数据分析与机器学习提供稳定可靠的数据基础。

1

2026.02.25

Java领域驱动设计(DDD)与复杂业务建模实战
Java领域驱动设计(DDD)与复杂业务建模实战

本专题围绕 Java 在复杂业务系统中的建模与架构设计展开,深入讲解领域驱动设计(DDD)的核心思想与落地实践。内容涵盖领域划分、聚合根设计、限界上下文、领域事件、贫血模型与充血模型对比,并结合实际业务案例,讲解如何在 Spring 体系中实现可演进的领域模型架构,帮助开发者应对复杂业务带来的系统演化挑战。

1

2026.02.25

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

18

2026.02.24

Golang 性能优化专题:提升应用效率
Golang 性能优化专题:提升应用效率

《Golang 性能优化专题》聚焦 Go 应用在高并发与大规模服务中的性能问题,从 profiling、内存分配、Goroutine 调度、GC 机制到 I/O 与锁竞争逐层分析。结合真实案例讲解定位瓶颈的方法与优化策略,帮助开发者建立系统化性能调优思维,在保证代码可维护性的同时显著提升服务吞吐与稳定性。

9

2026.02.24

Golang 面试题精选:高频问题与解答
Golang 面试题精选:高频问题与解答

Golang 面试题精选》系统整理企业常见 Go 技术面试问题,覆盖语言基础、并发模型、内存与调度机制、网络编程、工程实践与性能优化等核心知识点。每道题不仅给出答案,还拆解背后的设计原理与考察思路,帮助读者建立完整知识结构,在面试与实际开发中都能更从容应对复杂问题。

6

2026.02.24

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

5

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webpack4.x---十天技能课堂
Webpack4.x---十天技能课堂

共20课时 | 1.5万人学习

两小时学会 Webpack
两小时学会 Webpack

共14课时 | 1.7万人学习

Node.js-前端工程化必学
Node.js-前端工程化必学

共19课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号