目录
缓存
网页加载
html
css分离
common
本地开发
打包速度
DllPlugin
happypack
devtool
babel-loader
noParse && alias
tree shaking
压缩
UglifyJsPlugin
UglifyJsParallelPlugin
其他
脚本cdn
分析
首页 web前端 css教程 Webpack的经验分享

Webpack的经验分享

Feb 02, 2018 pm 02:28 PM
web webpack 经验

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 加快。

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配置方法详解

以上是Webpack的经验分享的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE3入门教程:使用Webpack进行打包和构建 VUE3入门教程:使用Webpack进行打包和构建 Jun 15, 2023 pm 06:17 PM

Vue是一款优秀的JavaScript框架,它可以帮助我们快速构建交互性强、高效性好的Web应用程序。Vue3是Vue的最新版本,它引入了很多新的特性和功能。Webpack是目前最流行的JavaScript模块打包器和构建工具之一,它可以帮助我们管理项目中的各种资源。本文就为大家介绍如何使用Webpack打包和构建Vue3应用程序。1.安装Webpack

Java API 开发中使用 Jetty7 进行 Web 服务器处理 Java API 开发中使用 Jetty7 进行 Web 服务器处理 Jun 18, 2023 am 10:42 AM

JavaAPI开发中使用Jetty7进行Web服务器处理随着互联网的发展,Web服务器已经成为了应用程序开发的核心部分,同时也是许多企业所关注的焦点。为了满足日益增长的业务需求,许多开发人员选择使用Jetty进行Web服务器开发,其灵活性和可扩展性受到了广泛的认可。本文将介绍如何在JavaAPI开发中使用Jetty7进行We

如何使用Golang实现Web应用程序的表单验证 如何使用Golang实现Web应用程序的表单验证 Jun 24, 2023 am 09:08 AM

表单验证是Web应用程序开发中非常重要的一个环节,它能够在提交表单数据之前对数据进行有效性检查,避免应用程序出现安全漏洞和数据错误。使用Golang可以轻松地实现Web应用程序的表单验证,本文将介绍如何使用Golang来实现Web应用程序的表单验证。一、表单验证的基本要素在介绍如何实现表单验证之前,我们需要知道表单验证的基本要素是什么。表单元素:表单元素是指

如何从驾驶舱Web用户界面启用管理访问 如何从驾驶舱Web用户界面启用管理访问 Mar 20, 2024 pm 06:56 PM

Cockpit是一个面向Linux服务器的基于Web的图形界面。它主要是为了使新用户/专家用户更容易管理Linux服务器。在本文中,我们将讨论Cockpit访问模式以及如何从CockpitWebUI切换Cockpit的管理访问。内容主题:驾驶舱进入模式查找当前驾驶舱访问模式从CockpitWebUI启用Cockpit的管理访问从CockpitWebUI禁用Cockpit的管理访问结论驾驶舱进入模式驾驶舱有两种访问模式:受限访问:这是驾驶舱的默认访问模式。在这种访问模式下,您不能从驾驶舱Web用户

web标准是什么东西 web标准是什么东西 Oct 18, 2023 pm 05:24 PM

Web标准是一组由W3C和其他相关组织制定的规范和指南,它包括HTML、CSS、JavaScript、DOM、Web可访问性和性能优化等方面的标准化,通过遵循这些标准,可以提高页面的兼容性、可访问性、可维护性和性能。Web标准的目标是使Web内容能够在不同的平台、浏览器和设备上一致地展示和交互,提供更好的用户体验和开发效率。

PHP在Web开发中是属于前端还是后端? PHP在Web开发中是属于前端还是后端? Mar 24, 2024 pm 02:18 PM

PHP在Web开发中是属于后端。PHP是一种服务器端脚本语言,主要用于处理服务器端的逻辑,生成动态网页内容。与前端技术相比,PHP更多地用于与数据库交互、处理用户请求以及生成页面内容等后端操作。接下来通过具体的代码示例来说明PHP在后端开发中的应用。首先,我们来看一个简单的PHP代码示例,用于连接数据库并查询数据:

PHP开发心得分享:掌握各种功能实现的经验与建议 PHP开发心得分享:掌握各种功能实现的经验与建议 Nov 22, 2023 pm 12:02 PM

在当前互联网高速发展的时代,PHP作为一种服务器端脚本语言,被越来越多的开发者所采用。PHP具有简单易学、灵活、开源免费等优势,可以快速开发各种网站和Web应用。然而,作为一名PHP开发者,要想在激烈的竞争中脱颖而出并写出高效稳定的代码,还需要掌握各种功能的实现技巧和经验。首先,合理规划项目架构是开发PHP应用的关键。一个良好的项目架构可以提供更好的代码可维

web是什么意思 web是什么意思 Jan 09, 2024 pm 04:50 PM

web是全球广域网,也称为万维网,是互联网的一种应用形式。Web 是一种基于超文本和超媒体的信息系统,它允许用户通过超链接在不同的网页之间跳转,从而浏览和获取信息。Web 的基础是互联网,它使用统一、标准化的协议和语言,使得不同计算机之间能够进行数据交换和信息共享。

See all articles