vue cli升级webapck4总结


Posted in Javascript onApril 04, 2018

webpack4 released 已经有一段时间了,插件系统趋于平稳,适逢对webpack3的打包速度很不满意,因此决定将当前在做的项目进行升级,正好也实践一下webpack4。

新特性

0配置

应该是parcel出来以后,webpack团队意识到其配置确实有点复杂,不太容易上手。so, webapck4 开始支持0配置启动。不过,万变不离其宗,webpack4的0配置也只是支持了默认entry 和 output而已,即默认entry为./src,默认output为/dist。

模式选择mode

mode有两个可选项,production & development。作为必选项,mode是不可缺省的。在production模式下,会默认做一些必要的优化,如代码压缩和作用域提升,还会默认指定process.env.NODE_ENV 为 production。在development模式下,优化了增量构建,支持注释和提示,并且支持 eval 下的 source maps,同时默认指定process.env.NODE_ENV 为 development。

sideEffects

通过该配置可以大幅度减小打包体积。当模块的 package.json 配置sideEffects:false表明该模块没有副作用,也就意味着 webpack 可以安全地清除被用于重复导出(re-exports)的代码。

模块类型

webpack4提供了5种模块类型。

  1. json: 可通过 require 和 import 导入的 JSON 格式的数据(默认为 .json 的文件)
  2. webassembly: WebAssembly 模块,(目前是 .wasm 文件的默认类型)
  3. javascript/auto: (webpack 3中的默认类型)支持所有的JS模块系统:CommonJS、AMD。
  4. javascript/esm: EcmaScript模块(默认 .mjs 文件)。
  5. javascript/dynamic: 仅支持 CommonJS & AMD。

JSON

webpack 4 不仅支持本地处理 JSON,还支持对 JSON 的 Tree Shaking。当使用 ESM 语法 import json 时,webpack 会消除掉JSON Module 中未使用的导出。此外,如果要用 loader 转换 json 为 js,需要设置 type 为 javascript/auto。

optimization

Webpack 4 删除了 CommonsChunkPlugin,并默认启用了它的许多功能。因此webpack4可以实现很好的默认优化。但是,对于那些需要自定义的缓存策略,增加了 optimization.splitChunks 和 optimization.runtimeChunk。具体解释可参考这篇文章,解释得很详细。RIP CommonsChunkPlugin点击预览

手把手升级

我是把原来vue cli的项目做了一下升级,总体来说,升级还算是比较顺利步骤,这里我们分成两步走,首先升级相关依赖的插件,然后优化webapck配置文件。

升级插件

首先要把下面列表的插件升级到对应版本或者最新版本

webpack@4.4.1
css-loader@0.28.10,
extract-text-webpack-plugin@4.0.0-beta.0,
file-loader@1.1.11,
html-webpack-plugin@3.1.0,
optimize-css-assets-webpack-plugin@4.0.0,
url-loader@1.0.1,
vue-loader@14.2.2,
vue-style-loader@4.1.0,
vue-template-compiler@2.5.16,
webpack-bundle-analyzer@2.11.1,
webpack-dev-middleware@3.1.0,
webpack-dev-server@3.1.1,
webpack-hot-middleware@2.21.2

如果遇到其他包报错,应该是升级到最新的就可以解决了。

更新配置文件

webpack.dev.conf.js

dev环境变化不大,毕竟webpack4很大一部分的优化都是针对生产环境的,该文件我们只需要删除一些不再需要的插件既可以。例如:webpack.NamedModulesPlugin、webpack.NoEmitOnErrorsPlugin,其功能webpack4已经默认配置。同时,要设置

mode: 'development'
webpack.production.conf.js

webvpack4中改动最大,影响也最大的就是webpack4使用optimization.splitChunks替代了CommonsChunkPlugin。以前的CommonsChunkPlugin主要用来抽取代码中的共用部分,webpack runtime之类的代码,结合chunkhash,实现最好的缓存策略。而optimization.splitChunks则实现了相同的功能,并且配置更加灵活,具体解释可参考这篇文章,解释得很详细。

mode: 'production',
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
chunks: 'initial',
name: 'vendors',
},
'async-vendors': {
test: /[\\/]node_modules[\\/]/,
minChunks: 2,
chunks: 'async',
name: 'async-vendors'
}
}
},
runtimeChunk: { name: 'runtime' }
}

总结

总体来说本次升级还算顺利,不到一天搞定,目前感觉,打包速度大约优化了70%左右,同时打包后的代码体积也有了很大的优化,带来的效果很显著的。

Javascript 相关文章推荐
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
Feb 22 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
jQuery实现文件上传进度条特效
Aug 12 Javascript
浅谈js中的in-for循环
Jun 28 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
Dec 19 Javascript
详解JS模块导入导出
Dec 20 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 Javascript
el-table树形表格表单验证(列表生成序号)
May 31 Javascript
关于angular浏览器兼容性问题的解决方案
Jul 26 Javascript
JavaScript实现短暂提示框功能
Apr 04 #Javascript
Vue filter介绍及详细使用
Apr 04 #Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 #Javascript
详解如何用babel转换es6的class语法
Apr 03 #Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
Apr 03 #Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
Apr 03 #Javascript
使用react实现手机号的数据同步显示功能的示例代码
Apr 03 #Javascript
You might like
php中in_array函数用法探究
2014/11/25 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
javascript 学习之旅 (1)
2009/02/05 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
Europcar意大利:汽车租赁
2019/07/07 全球购物
女大学生个人求职信
2013/12/09 职场文书
公益活动策划方案
2014/01/09 职场文书
小松树教学反思
2014/02/11 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
行政处罚告知书
2015/07/01 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android